Много-ко-многим» (М:М)

Принцип каждой записи родительской таблицы может соответствовать любое кол-во записей дочерней таблице и наоборот.

Логическое связывание таблиц производится с помощью индекса. Первичный ключ может стать основой для первичного индекса.

Ключ – поле или набор полей, который определяют конкретную запись.

Первичный ключ (primary key) – поле (или набор полей) таблицы, однозначно идентифицирующий каждую из ее записей. Если ключ состоит из нескольких атрибутов, то он называется составным (сложным) первичным. Альтернативный ключ – это поле (или набор полей), несовпадающее с первичным ключом и уникально идентифицирующий экземпляр записи.

При связи двух таблиц с первичным ключом первой таблицы связывается внешний ключ второй таблицы. Внешний ключ – это поле (или набор полей), чьи значения совпадают с имеющимися значениями первичного ключа другой таблицы.

Говоря о первичном ключе, необходимо заметить, что он не должен обладать признаком избыточности. Нет смысла задавать в качестве первичного ключа набор из двух или более полей, если для идентификации записей достаточно одного поля (например, поля «Порядковый номер»).

Задание ключа для таблицы означает автоматическую сортировку записей и контроль отсутствия повторяющихся значений в ключевых полях. Данные функции необходимы для того, что осуществлялось так называемое индексирование.

Ключи являются основой для индексов, которые используются непосредственно для связи таблиц.

Индекс – средство ускорения операции поиска записей, использующееся для установки связей между таблицами.

Таблица, для которой используется индекс, называют индексированной.

Виды индексов:

1. Первичные – созданные по ключевым полям таблиц.

2. Вторичные (пользовательские) – созданные пользователями для не ключевых полей.

Различают простые и составные индексы.

Простой индекс представлен одним полем или логическим выражением, обрабатывающим одно поле.

Составной индекс представлен несколькими полями с возможностью использования различных функций.

Индексы таблицы хранятся в индексном файле. Если составной индексный файл имеет то же самое имя, что и БД, он называется структурированным составным индексом и автоматически открывается вместе с базой данных. Когда составной индексный файл имеет имя, не совпадающее с именем БД, он называется независимым составным индексом (неструктурированным).

Целостность данных – это средство защиты данных по полям связи, позволяющее поддерживать таблицы в согласованном (непротиворечивом) состоянии (то есть не допускающее существование в подчиненной таблице записей, не имеющих соответствующих записей в родительской таблице).

Целостность – это поддержание БД в актуальном (непротиворечивом) состоянии.

Целостность информации - способность средства вычислительной техники (в рассматриваемом случае - информационной системы в целом) обеспечить неизменность информации в условиях случайного и (или) преднамеренного искажения (разрушения). Поддержание целостности базы данных может рассматриваться как защита данных от неверных изменений или разрушений (не путать с незаконными изменениями и разрушениями, являющимися проблемой безопасности). Современные СУБД имеют ряд средств для обеспечения поддержания целостности (так же, как и средств обеспечения поддержания безопасности).

7. ЯЗЫК ПРОГРАММИРОВАНИЯ С++. КОМАНДЫ ПРЕПРОЦЕССОРА. ПОНЯТИЕ ГЛАВНОЙ ФУНКЦИИ. ЛОКАЛЬНЫЕ И ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ. СТРУКТУРА ПРОГРАММЫ. ТИПЫ ДАННЫХ. ОРГАНИЗАЦИЯ ВЕТВЛЕНИЙ И ЦИКЛОВ. ОБРАБОТКА МАССИВОВ. РАБОТА С ФАЙЛАМИ.[17]

Си++ (англ. C++) — компилируемый строго типизированный язык программирования общего назначения. Поддерживает разные парадигмы программирования: процедурную, обобщённую, функциональную; наибольшее внимание уделено поддержке объектно-ориентированного программирования.

В 1990-х годах язык стал одним из наиболее широко применяемых языков программирования общего назначения.

При создании Си++ стремились сохранить совместимость с языком Си. Большинство программ на Си будут исправно работать и с компилятором Си++. Си++ имеет синтаксис, основанный на синтаксисе Си.

Название «Си++» происходит от Си, в котором унарный оператор ++ обозначает приращение.

Команды препроцессора:

В языке Си++ имеется несколько директив, которые начинаются со знака #: #include, #define, #undef, #ifdef, #else, #if, #pragma. Все они обрабатываются так называемым препроцессором.

Иногда препроцессор называют макропроцессором, поскольку в нем определяются макросы. Директивы препроцессора начинаются со знака #, который должен быть первым символом в строке после пробелов.

Определение макросов

Форма директивы #define определяет макроимя. Везде, где в исходном файле встречается это имя, оно будет заменено его определением.

Директива #undef отменяет определение имени, после нее имя перестает быть определенным.

У препроцессора есть несколько макроимен, которые он определяет сам, их называют предопределенными именами. У разных компиляторов набор этих имен различен, но два определены всегда:__FILE__ является имя текущего исходного файла, заключенное в кавычки. Значением __LINE__ – номер текущей строки в файле.

Условная компиляция

В каком-то смысле директива #if похожа на условный оператор if. Однако, в отличие от него, условие – это константа, которая вычисляется на стадии препроцессора, и куски текста, не удовлетворяющие условию, просто игнорируются.

Директив #elif может быть несколько (либо вообще ни одной), директива #else также может быть опущена.

Директива #ifdef – модификация условия компиляции. Условие считается выполненным, если указанное после нее макроимя определено.

Дополнительные директивы препроцессора

Директива #pragma используется для выдачи дополнительных указаний компилятору. Например, не выдавать предупреждений при компиляции, или вставить дополнительную информацию для отладчика.

Директива #error выдает сообщение и завершает компиляцию. Например, конструкция

Директива #line изменяет номер строки и имя файла, которые хранятся в предопределенных макроименах __LINE__ и __FILE__.

Локальные и глобальные переменные:

Локальные переменные – переменные, объявленные в теле функции.

Глобальные переменные – переменные, объявленные в начале программы вне тел всех функций.

Структура программы. Понятие главной функции:

Самая короткая программа на языке Си++ выглядит так:

// Простейшая программа

int main() { return 1; }

Первая строчка в программе – комментарий, который служит лишь для пояснения. Признаком комментария являются два знака деления подряд (//).

main – это имя главной функции программы. С функции main всегда начинается выполнение. У функции есть имя (main), после имени в круглых скобках перечисляются аргументы или параметры функции (в данном случае у функции main аргументов нет). У функции может быть результат или возвращаемое значение. Если функция не возвращает никакого значения, то это обозначается ключевым словом void. В фигурных скобках записывается тело функции – действия, которые она выполняет. Оператор return 1 означает, что функция возвращает результат – целое число 1.

Чтобы не усложнять программу, мы воспользуемся одним из готовых, предопределенных классов – классом ostream (поток ввода-вывода, базовый класс для iostream). Этот класс определен в файле заголовков "iostream.h". Поэтому первое, что надо сделать – включить файл заголовков в нашу программу:

#include <iostream.h>

int main() { return 1; }

Кроме класса, файл заголовков определяет глобальный объект этого класса cout. Объект называется глобальным, поскольку доступ к нему возможен из любой части программы. Этот объект выполняет вывод на консоль. В функции main мы можем к нему обратиться и послать ему сообщение:

#include <iostream.h>

int main()

{ cout << "Hello, world!" << endl; return 1;}

Операция сдвига << для класса ostream определена как "вывести". Таким образом, программа посылает объекту cout сообщения "вывести строку Hello, world!" (endl обозначает новую строку). В ответ на эти сообщения объект cout выведет строку "Hello, world!" на консоль и переведет курсор на следующую строку.

Типы данных:

Встроенные типы данных предопределены в языке. Это самые простые величины, из которых составляют все производные типы, в том числе и классы. Различные реализации и компиляторы могут определять различные диапазоны значений целых и вещественных чисел.

Далее перечислены простейшие типы данных, которые определяет язык Си++, и приведены наиболее типичные диапазоны их значений.

Встроенные типы языка Си++.

Описание состоит из спецификатора типа и следующего за ним списка переменных. Переменные в списке разделяются запятыми. В конце описания ставится точка с запятой.

Типы данных:

Int – целый (integer), имеются служебные слова, которые можно использовать с типом int: short int (короткое целое), unsigned int (целое без знака), long int (длинное целое), которые сокращают или расширяют диапазон представления чисел.

Char – символьный, допустимое значение для этого типа – один символ, символ записывается в апострофах.

Float – вещественный(с плавающей точкой), Значения этого типа – числа, но, в отличии от char и int, не обязательно целые.

Double - вещественные числа двойной точности, этот тип аналогичен float, но имеет значительно больший диапазон значений.

Массивы.

Int a[10], int – тип, a – имя, [размер]. Все элементы нумеруются с 0. Если элементов в массиве больше, чем данных, то остальные элементы обнуляются.

Размерность массива и тип его элементов определяют объем памяти, необходимый для размещения массива. Т.к. объем массива определяется на этапе компиляции, то размерность должна быть задана целой положительной константой или константным выражением.

Если при описании массива не указана размерность, то должен быть инициализатор и компилятор выделять память по количеству данных.

Двумерные массивы: располагаются в памяти в последовательных ячейках построчно таким образом, что при переходе к следующему элементу быстрее всего изменяется последний индекс.

Динамические массивы: используются если до начала компиляции неизвестно количество элементов массива. Память выделяется командой new, адрес начала массива хранится в переменной, которая называется указателем:

Int n=10;

Int *a=new int[n] – описан указатель на целую величину, которому присваивается адрес начала непрерывной области динамической памяти, выделенной с помощью операции new.

Выделяется столько памяти, сколько необходимо для хранения 10 величин типа int и адрес ее начала записывается в указатель а.

Динамические массивы не инициализируются и не обнуляются.

Обработка массивов:

Int a[10], int – тип, a – имя, [размер]. Все элементы нумеруются с 0. Если элементов в массиве больше, чем данных, то остальные элементы обнуляются.

Размерность массива и тип его элементов определяют объем памяти, необходимый для размещения массива. Т.к. объем массива определяется на этапе компиляции, то размерность должна быть задана целой положительной константой или константным выражением.

Если при описании массива не указана размерность, то должен быть инициализатор и компилятор выделять память по количеству данных.

Двумерные массивы: располагаются в памяти в последовательных ячейках построчно таким образом, что при переходе к следующему элементу быстрее всего изменяется последний индекс.

Динамические массивы: используются если до начала компиляции неизвестно количество элементов массива. Память выделяется командой new, адрес начала массива хранится в переменной, которая называется указателем:

Int n=10;

Int *a=new int[n] – описан указатель на целую величину, которому присваивается адрес начала непрерывной области динамической памяти, выделенной с помощью операции new.

Выделяется столько памяти, сколько необходимо для хранения 10 величин типа int и адрес ее начала записывается в указатель а.

Динамические массивы не инициализируются и не обнуляются.

Организация ветвления и циклов:

Ветвление

1. Простой условный оператор if (выражение) оператор1; [ else оператор2];

2. Составной условный оператор if (выражение) { блок операторов1 }; else { блок операторов2 };

Если структура else отсутствует и выражение не выполняется, управление передается следующему оператору.

3. Вложенный условный оператор if (a>2*b) && (b<p)) x=2*b;

4. Использование оператора-перключателя switch.

В тех случаях, когда программам необходимо осуществить проверку определенных значений, они могут использовать оператор switch. Если использовать оператор switch, то сначала необходимо указать условие (выражение) и затем один или несколько вариантов (case), которые программа попытается сопоставить с условием.

5. Оператор безусловного перехода goto метка

ЦИКЛЫ:

1. Цикл с параметром (со счетчиком)

for (<инициализация>;<выражение(условие)>; >;<модификация>)

{тело цикла;}

Инициализация - это список описаний и определений начальных значений параметров цикла, перечисленных через (,).

Условие – это условие при выполнении, которого происходит выполнение тела цикла.

Выражение – это список выражений перечисленных через (,) изменяющее значение параметров цикла и выполняется каждый раз после тела цикла перед очередной проверкой условия.

Инициализация выполняется только один раз в начале цикла.

Тело цикла - это простой или составной оператор.

2. Цикла с предусловием: while (выражение) {тело цикла;}

Формат оператора while: while (<условие>)

{тело цикла;}

Если программа встречает оператор while, она проверяет заданное условие. Если условие истинно, программа выполняет тело цикла while. После выполнения последнего оператора в цикле, цикл while опять проверяет условие. Если условие все еще истинно, повторяются операторы цикла и повторяется данный процесс. Когда условие, наконец, становится ложным, цикл завершается и программа продолжает свое выполнение с первого оператора, следующего за циклом.

Цикл с постусловием.

do {тело цикла(операторы);}

while(<выражение (условие)>);

При компилировании программа встречает цикл do while, она входит в цикл и запускает выполнение операторов, содержащихся в цикле. Затем программа оценивает заданное условие. Если условие истинно, программа возвращается к началу цикла. Если условие ложно, программа не повторяет инструкции цикла, продолжая вместо этого выполнение с первого оператора, следующего за циклом.

8. ИСТОРИЯ РАЗВИТИЯ ВЫЧИСЛИТЕЛЬНЫХ СЕТЕЙ. КЛАССИФИКАЦИЯ КОМПЬЮТЕРНЫХ СЕТЕЙ ПО ТОПОЛОГИИ, ТЕРРИТОРИАЛЬНОМУ ПРИНЦИПУ, НАЗНАЧЕНИЮ И ВИДУ ОПЕРАЦИОННОЙ СИСТЕМЫ. ПЕРСПЕКТИВЫ РАЗВИТИЯ.[49]

Сеть - это совокупность объектов, образуемых устройствами передачи и обработки данных. Международная организация по стандартизации определила вычислительную сеть как последовательную бит-ориентированную передачу информации между связанными друг с другом независимыми устройствами. Вычислительная сеть — это совокупность компьютеров, соединенных линиями связи. Линии связи образованы кабелями, сетевыми адаптерами и другими ком­муникационными устройствами. Все сетевое оборудование работает под управ­лением системного и прикладного программного обеспечения.

Эволюция вычислительных систем: Концепция вычислительных сетей является логическим результатом эволюции компьютерной технологии. Первые компьютеры 50-х годов — большие, громоздкие и дорогие — предназначались для очень небольшого числа избранных пользовате­лей. Такие компьютеры не были пред­назначены для интерактивной работы пользователя, а использовались в режиме пакетной обработки.

1.Системы пакетной обработки (50-е годы): Системы пакетной обработки, как правило, строились на базе мэйнфрейма — мощ­ного и надежного компьютера универсального назначения. Пользователи подго­тавливали перфокарты, содержащие данные и команды программ, и передавали их в вычислительный центр. Операторы вводили эти карты в компьютер, а распеча­танные результаты пользователи получали обычно только на следующий день. Таким образом, одна неверно набитая карта означала как минимум суточную задержку.

2.Многотерминальные системы - прообраз сети (60-е годы): По мере удешевления процессоров в начале 60-х годов появились новые способы организации вычислительного процесса, которые позволили учесть интересы пользо­вателей. Начали развиваться интерактивные многотерминальные системы разделе­ния времени. В таких системах компьютер отдавался в распоряжение сразу нескольким пользователям. Каждый пользователь получал в свое распоря­жение терминал, с помощью которого он мог вести диалог с компьютером. Причем время реакции вычислительной системы было достаточно мало для того, чтобы пользователю была не слишком заметна параллельная работа с компьютером и других пользователей. Разделяя, таким образом, компьютер, пользователи получи­ли возможность за сравнительно небольшую плату пользоваться преимуществами компьютеризации.

3.Появление глобальных сетей: Появилась потребность в соединении компьютеров, находящихся на большом расстоянии друг от друга. Началось все с реше­ния более простой задачи — доступа к компьютеру с терминалов, удаленных от него на многие сотни, а то и тысячи километров. Терминалы соединялись с компь­ютерами через телефонные сети с помощью модемов. Такие сети позволяли много­численным пользователям получать удаленный доступ к разделяемым ресурсам нескольких мощных компьютеров класса суперЭВМ. Затем появились системы, в которых наряду с удаленными соединениями типа терминал—компьютер были ре­ализованы и удаленные связи типа компьютер—компьютер. Компьютеры получили возможность обмениваться данными в автоматическом режиме, что, собствен­но, и является базовым механизмом любой вычислительной сети. Используя этот механизм, в первых сетях были реализованы службы обмена файлами, синхрони­зации баз данных, электронной почты и другие, ставшие теперь традиционными сетевые службы.

4.Первые локальные сети (70-е годы): В начале 70-х годов произошел технологический прорыв в области производства компьютерных компонентов — появились большие интегральные схемы. Их срав­нительно невысокая стоимость и высокие функциональные возможности привели к созданию мини-компьютеров, которые стали реальными конкурентами мэйн­фреймов. Закон Гроша перестал соответствовать действительности, так как деся­ток мини-компьютеров выполнял некоторые задачи (как правило, хорошо распараллеливаемые) быстрее одного мэйнфрейма, а стоимость такой мини-ком­пьютерной системы была меньше.

5.Создание стандартных технологий локальных сетей (80-е годы): В середине 80-х годов положение дел в локальных сетях стало кардинально ме­няться. Утвердились стандартные технологии объединения компьютеров в сеть — Ethernet, Arcnet, Token Ring. Мощным стимулом для их развития послужили пер­сональные компьютеры. Эти массовые продукты явились идеальными элементами. Для построения сетей — с одной стороны, они были достаточно мощными для работы сетевого программного обеспечения, а с другой — явно нуждались в объединении своей вычислительной мощности для решения сложных задач, а также разделения дорогих периферийных устройств и дисковых массивов. Поэтому персональные компьютеры стали преобладать в локальных сетях, причем не только в качестве клиентских компьютеров, но и в качестве центров хранения и обработки данных.

6.Современные тенденции: Сегодня вычислительные сети продолжают развиваться, причем достаточно быст­ро. Разрыв между локальными и глобальными сетями постоянно сокращается во многом из-за появления высокоскоростных территориальных каналов связи, не уступающих по качеству кабельным системам локальных сетей. В глобальных се­тях появляются службы доступа к ресурсам, такие же удобные и прозрачные, как и службы локальных сетей. Подобные примеры в большом количестве демонстри­рует самая популярная глобальная сеть — Internet.

Изменяются и локальные сети. Вместо соединяющего компьютеры пассивного кабеля в них в большом количестве появилось разнообразное коммуникационное оборудование — коммутаторы, маршрутизаторы, шлюзы. Благодаря такому обору­дованию появилась возможность построения больших корпоративных сетей, на­считывающих тысячи компьютеров и имеющих сложную структуру.

Достоинства вычислительных сетей:

· Обмен электронными сообщениями. (позволяет экономить время и бумагу).

· Совместное использование оборудования. Высококачественные, мощные и дорогие принтеры, модемы, дисковое пространство гораздо эффективнее используются в сети, чем на отдельных компьютерах.

· Совместное использование данных. Распределенная обр-тка данных и использование баз данных значительно увеличивает инф-ционные возм-сти организации.

· Удаленный доступ. Возможность для пользователей выходить в глобальные сети для доступа к информации, находящейся в них.

· Снижение затрат. Распределенная сеть дешевле других вариантов совместного исп-ния комп-ров (напр., исп-ния большой ЭВМ), она позволяет разделять дорогие ресурсы и снижает требования к мощности отдельных рабочих станций.

· Гибкость. Локальные сети допускают постеп. развитие и довольно просто модифицируются, приспосабливаясь к потребностям организации.

· Надежность. Выход из строя одного узла сети не влияет на работу остальных, если на нем не находится требуемый ресурс. Отдельные клиенты сети остаются независимыми друг от друга.

· Высокая скорость. Доступ к сетевым БД на 10-25% быстрее, чем доступ к большим ЭВМ.

· Страховка. Поскольку данные, разделяемые в сети, явл-ся важными ресурсами, они часто дублируются для страховки, чего не могут позволить себе отдельные польз-тели.

Недостатки вычислительных сетей:

· Недостаток стандартизации. Технология ЛАН относительно молода и существуют различные, часто плохо совместимые стандарты.

· Безопасность. Методы обеспечения безопасности в ЛАН не настолько эффективны, как при использовании больших централизованных систем.

· Необходимость обслуживания. Для обеспечения работы ЛАН необходимы специалисты, занимающиеся ее повседневным обслуживанием.

· Надежность. Выход из строя сервера означает прекращение работы во многих местах компании, что приводит к большим потерям.

· Затраты. Хотя ЛВС дешевле централизованной системы с использованием большой ЭВМ, ее внедрение все же сопровождается значительными капиталовложениями. Переход на ЛВС не является дешевым, особенно если учесть затраты на обучение персонала, установку сети, переход на новые виды информационных систем.

· Классификация:

· по ТОПОЛОГИи СЕТИ:

Топология (конфигурация) - это способ соединения компьютеров в сеть. Тип топологии определяет стоимость, защищенность, производительность и надежность эксплуатации рабочих станций, для которых имеет значение время обращения к файловому серверу.

Понятие топологии широко используется при создании сетей. Одним из подходов к классификации топологий ЛВС является выделение двух основных классов топологий: широковещательные и последовательные.

В широковещательных топологиях ПК передает сигналы, которые могут быть восприняты остальными ПК. К таким топологиям относятся топологии: общая шина, дерево, звезда.

В последовательных топологиях информация передается только одному ПК. Примерами таких топологий являются: произвольная (произвольное соединение ПК), кольцо, цепочка.

Виды топологий. Существуют пять основных топологий:

1) Общая шина (Bus): это тип сетевой топологии, в которой рабочие станции расположены вдоль одного участка кабеля, называемого сегментом. Предполагается использование одного кабеля, к которому подключаются все компьютеры сети. В случае топологии Общая шина кабель используется всеми станциями по очереди.

2) Кольцо (Ring): это топология ЛВС, в которой каждая станция соединена с двумя другими станциями, образуя кольцо. Данные передаются от одной рабочей станции к другой в одном направлении (по кольцу). Каждый ПК работает как повторитель, ретранслируя сообщения к следующему ПК, т.е. данные, передаются от одного компьютера к другому как бы по эстафете.

3) Звезда (Star): топология ЛВС, в которой все рабочие станции присоединены к центральному узлу (например, к концентратору), который устанавливает, поддерживает и разрывает связи между рабочими станциями. Преимуществом такой топологии является возможность простого исключения неисправного узла. Однако, если неисправен центральный узел, вся сеть выходит из строя.

4) Ячеистая (Cell) топология. Для ячеистой топологии характерна схема соединения компьютеров, при которой физические линии связи установлены со всеми рядом стоящими компьютерами:

5) Смешанная топология. В то время как небольшие сети, как правило, имеют типовую топологию - звезда, кольцо или общая шина, для крупных сетей характерно наличие произвольных связей между компьютерами. В таких сетях можно выделить отдельные произвольно подсети, имеющие типовую топологию, поэтому их называют сетями со смешанной топологией:

по территориальному принципу:

Выделяют три типа сетей по территориальному расположению:

1. Глобальные сети (WAN – Wide Area Net) – объединяет абонентов расположенных в различных странах, на разных континентах. Взаимодействие между абонентами такой сети может осуществляться посредством телефонных линий связи, радиосвязи и спутниковых связи.

2. Региональные сети ( MAN – Metropolitan area net ) – вычислительная сеть связывает абонентов, расположенных на значительном расстоянии друг от друга. Она может включать абонентов внутри большого города, региона, страны.

3. Локальные сети (LAN – Local Area Net) – вычислительная сеть объединяет расположенных в пределах небольшой территории. К классу LAN относятся сети отдельных предприятий, фирм, банков офисов.

По виду операционной системы отличают: Windows и Linux сети. Различаются по принципам настройки сети.

· По функциональному назначению

1. Сети хранения данных (Storage Area Network) — представляет собой архитектурное решение для подключения внешних устройств хранения данных, таких как дисковые массивы, ленточные библиотеки, оптические накопители к серверам, таким образом, чтобы операционная система распознала подключённые ресурсы, как локальные. Несмотря на то, что стоимость и сложность таких систем постоянно падают, по состоянию на 2007 год сети хранения данных остаются редкостью за пределами больших предприятий.

2.Серверные фермы — это ассоциация серверов, соединенных сетью передачи данных и работающих как единое целое. Один из видов серверной фермы определяет метакомпьютерная обработка. Во всех случаях рассматриваемая ферма обеспечивает распределенную обработку данных. Она осуществляется в распределенной среде обработки данных.

Серверная ферма является ядром крупного центра обработки данных.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: