|
Программирование >> Реализация целостности данных
Между тем однозначная идентификация любого кортежа является непременным требованием к ключу-кандидату. Повторю еще раз: вы должны понимать специфику предметной области, чтобы правильно определить ключевой набор атрибутов. Рассмотрим отношение Invoices (рис. 2-9). Поле Customer ID явля-уникальным в этом примере, но весьма сомнительно, что оно будет оставаться уникальным в дальнейшем - ведь компания стремится продать каждому заказчику как можно больше различных товаров! Несмотря на кажущуюся очевидность выводов, специфика предметной области говорит, что это поле не является ключом-кандидатом. Если буквально следовать определению, то каждое отношение должно иметь, по меньшей мере, один ключ-кандидат - набор всех атрибутов, составляющих кортеж. Ключ-кандидат может состоять из единственного атрибута (простой ключ) или множества атрибутов (составной клюц). Тем не менее, дополнительное требование к ключу-кандидату такое: он должен состоять из минимального набора атрибутов, однозначно кортеж, поэтому полный набор атрибутов отношения не является ключом-кандидатом. Для отношения, показанного на рис. 2-10, атрибут gorv Л) является ключом-кандидатом, а набор хотя и уникален для каждого кортежа, не является им, так как атрибут Cate-goryName необязателен для однозначной идентификации кортежа. Beverages Soft drinks, coffees, teas, beers, and ales 2 Condiments Swee avory sauces, relishes s, and seasonings Desserts, Cheeses ,.....................5 GrainsiCereais Breads, crackers, pasta, and cergal В hfleat/pDultry Prepared meats . y:,. .. 7jPradycB Dried fruit and bean сигД ....., , .., 8: Seafood SBiSWaed and fish Puc. 2-10. Ключ-кандидат должен быть минимальным, чему соответствует Category ID, но не соответствует набор {CategorylD, Category Name} Иногда, хотя и не часто, отношение имеет несколько возможных ключей-кандидатов. В этом случае проектировщик должен по своему усмотрению выбрать один ключ-кандидат в качестве первичного ключа, гииеся ключи-кандидаты будут являться альтернативными ключами. Это особенность логической модели довольно удобна. (Напомню, что логическая модель данных - абстрактное понятие). Чтобы различать модель и ее физическую я предпочитаю ЧАСТЬ 1 Теория рслйцио нь1х баз данных использовать термин ключ-кандидат для логической модели данных и приберечь ичны и ключ для использования в физической реализации модели. ПРИМЕЧАНИЕ Когда единственно возможный ключ-кандидат чересчур громоздок (например, состоит из слишком многих атрибутов или слишком велик), вы можете использовать специальный тип данных, который механизм баз данных MiCTOSoflJet и Microsoft SQL Server поддерживают для создания искусственных ключей. В таких искусственных ключах хранятся значения, генерируемые самой системой. Называемые Auto-Number в Microsoft Jet и Identity в SQL Server, поля этого типа очень удобны для создания Mkuiopoii строк. При этом подразумевается, что вы не будете пытаться связать поле этого типа с какой-нибудь конкретной сущностью предметной области. Такие поля не более чем ярлыки. Ничто не гарантирует, что значения содержащихся в них величин будут строго последовательными, вы практически не можете контролировать процесс их генерации системой. Так что не пытайтесь использовать их для чего-либо еще, кроме нумерации, иначе столкнетесь с массой проблем. Хотя выбо андидата является семантической проблемой, не надейтесь, что атрибуты, с которых вы моделируете сущ- ности реального мира, всегда позволят вам построить подходящий ключ-кандидат. Люди обычно отзываются на свои имена; но, внимательно просмотрев страницы телефонной книги, вы убедитесь, что имена вряд ли можно рассматривать в качестве уникального идентификатора личности. Разумеется, скомбинировав имя с рядом других атрибутов, мы получим в результате ключ-кандидат, но этот путь может оказаться довольно извилистым. Однажды я работала в офисе, где из двадцати сотрудников двоих звали Ларри Симон и еще одного - Лари Симон. Они имели прозвища Коротыщка Лари , Ларричтемеи и Ларри-б.юн-то есть рост, национальность и цвет волос совместно с именем выступали, и вполне удачно, в роли ключа-кандидата. В подобных ситуациях наилучший способ получить ключ-кандидат - использовать идентификатор, генерируемый системой, такой, например, как поле Auto Number или Identify. Но помните: не следует пытаться использовать это поле для чего-либо еще кроме идентификации! Функциональная зависимость Концепция функциональной зависимости чрезвычайно удобна для анализа структуры данных. Рассматривая любой кортеж Т и два на- бора атрибутов этого кортежа ..,Хп} .....Ynj (множества X и Y не обязательно являются взаимоисключающими) говорят, что Y функционально зависит от X, если для каждого возможного значения X существует единственно возможное тствуюшее значение Y. Например, в отношении на рис. 2-10, все кортежи с одним и тем же значением goryJD[будут иметь одинаковое значение {Category Name. Derriprion). Поэтому мы вправе сказать, что атрибут Са-/ego/7/Дфункпионально определяет множество {CategoryNami Description}.У чтптс, что обратной функциональной зависимости может и не быть: зная величину е,Description]. нельзя однозначно величину Вы можете указать на функциональную зависимость между атрибутами так, как это сделано на рис 11. В тексте следует записать функциональную зависимость в виде выражения X Y, что читается как X зависит от CategorylD Category Name Description Гис. 2-11. Диаграмма функциональной зависимости чрезвычайно информативна и интуитивно понятна Функциональная зависимость привлекает ученых-математиков, поскольку это понятие является основой для развития математических подходов к моделированию данных. Если вы склонны к теоретическим изысканиям, то можете исследовать, например, свойства рефлексивности и транзитивности функциональной зависимости. На практике функциональная зависимость - удобный способ отразить тот очевидный факт, что для любого отношения существует некий набор атрибутов, уникальный для каждого кортежа данного отношения, и зная этот набор, можно определить значения других, неуникальных атрибутов. Если является ключом-кандидатом, то все атрибуты функционально зависимы от это следует из определения ключа-кандидата. ЕслХ : не является ключом-кандидатом, и функциональная зависимость нетривиальна (то есть не является подмножеством тогда отношение обязательно будет содержать избыточные данные и дальнейшей нормализации не избежать. До известной степени
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |