Аналогия ER-модели – диалоговые формы
атрибут → простое поле однозначная связь → поле со списком многозначная связь → подчиненная форма |
Выбор по простому ключу - надо заполнить следующие свойства поля со списком (подстановки):
источник строк ................ - таблица, откуда выбираются данные
присоединенный столбец - № колонки из , откуда выбираются записываемые данные
ширина столбцов............. - ширина столбцов , показываемых при выборе, от 1го как минимум до присоединенного, через точку с запятой. Ширина невидимых при выборе = 0. Первый из показываемых будет виден в поле после выбора.
число столбцов............... - количество столбцов из . Нулевые тоже считаются!!!
Подробнее см. Подстановки в Access.doc
Выбор по составному ключу (СК). Методы: использовать формальный ключ. Чтобы показать пользователю смысловой ключ надо использовать несколько полей со списком с одинаковыми колонками хранения, последовательный выбор отдельных элементов ключа. При выборе надо убирать повторяющиеся значения и учитывать уже выбранные элементы. Эти поля надо обновлять перед выбором! Выбор из запроса, «ключ» которого - сцепленные элементы СК. Выбранное пишется в свободное поле и «распаковывается» по элементам СК обработчиком события. В исходной форме дается кнопка «список», открывающая таблицу соответствия. В каждой ее строке добавляется кнопка «перенос», закрывающая эту таблицу и заполняющая элементы СК из выбранной строки.
Реализация элементов ER-модели в реляционных БД. Связи 1-n реализуются переносом ключа с единичной стороны на множественную (внешний ключ). Связи n-n – отдельной таблицей пар.
Любая реализация наследования должна позволять: получить список всех родительских экземпляров и работать отдельно с экземплярами из "детских" таблиц. Есть следующие варианты реализации:
Обозначим: К - ключевые данные Р - родительские данные, Д - детские данные | ||||
Родительская таблица | ||||
Таблицы-дети | ||||
Все данные – в "детских" таблицах. Родительский список получается их слиянием. | ||||
- | КРД | |||
КР | КД | Родительские данные – в родительской таблице. "Детские" – в "детских". Связь (1-0) – перенос ключа родителя в "детскую" сторону. Доступ к Р по связи через К. | ◄ | рекомендуемые варианты |
КР | КРД | Родительские данные – в родительской таблице. В "детских" таблицах – детские + родительские (в том числе ключ, обеспечивающий связь). Обеспечить идентичностьР!!! | ||
КРД | - | Все данные – в родительской таблице ("лишние" атрибуты = Null). Списки "детей" получаются: при взаимоисключающей классификации – по дополнительному признаку "тип строки" и при невзаимоисключающей – по флагам «относится к подклассу 1», «относится к подклассу 2»,... либо по Null полям | ◄ | |
КРД | К | Все данные – в родительской таблице ("лишние" атрибуты = Null). Детские таблицы содержат толькоключи строк-детей (для получения "детских" списков). | ||
КРД | КРД | Все данные и там, и там. Бессмысленно расточительный вариант. |
Недостаток современных СУБД: Поля, полученные по связи, не могут входить в ключ или внешний ключ. В результате некоторые безыизбыточные схемы не могут быть отображены в виде физической схемы.
Реляционные базы являются фактическим стандартом. Основаны на реляционной алгебре (РА), введенной Коддом.
Основные положения РА:
Если дан набор N множеств (доменов) {Di}, то назовем кортежем (записью) элемент декартового произведения U=D1´D2´…´DN, т.е. упорядоченную N-ку значений <x1, x2,…, xN>, где xiÎDi.
Отношением (таблицей) называется подмножество U. Позицию в кортеже называют полем записи или столбцом таблицы.
В стандарте РА значения в кортеже идентифицируются номером столбца или названием его домена. В реальной базе, разумеется, они имеют имена.
Над таблицами определены следующие операции, которые и образуют реляционную алгебру:
· Все теоретико-множественные операции (объединение, пересечение, разность и т.п.)
· Селекция. Выбор подмножества записей по данному условию.
· Проекция. Множество записей – то же, но множество столбцов – урезано. Поскольку речь идет о множествах, если при выбрасывании столбцов появляются дублирующие записи, то оставляются только уникальные.
· Соединение (join) отношений A и B по определенному столбцу (или нескольким). Каждый кортеж имеет все поля из обоих отношений (столбец, по которому проводится соединение – в одном экземпляре). Содержит все возможные сочетания записи из A и записи из B, где в выделенном столбце их значения равны.
· В реальных СУБД join расширен: условие – не только равенство одного столбца (равенство нескольких получается и в РА – применением нескольких join-ов), плюс есть «левый join» – когда во множество сочетаний включаются и записи А, которым нет соответствия в В (с пустыми (null) полями B), «правый» – симметрично, и «полный» – объединение левого и правого.
Нормализация баз данных. Кодд ввел понятие нормализации. Оно сводится к простому соображению: одни и те же данные не должны (по возможности…) повторяться в базе многократно. Это плохо из-за избыточности, но самое плохое в этом (но не всегда замечаемое), что обычно существует крайний случай, при котором множество оказывается пустым и эти повторяющиеся данные просто негде записать.
Например, если хранить в одной таблице данные о товаре (наименование, цена), сделке (дата и количество проданного) и клиенте (наименование и расчетный счет), то цена товара будет повторена многократно. А если у вас не было еще ни одной сделки, то вам некуда записать цену товара.
Существуют несколько нормальных форм – на самом деле просто признаков ненормализованной таблицы, – но все они интересны только исторически. Правило нормализации очевидно (соответствует пятой НФ):