"Проектирование реляционных баз данных." - читать интересную книгу автора (Джен Л. Харрингтон)10991 1001 1
10992 0022 1 10992 0486 1 10993 0209 1 10993 1001 2 10994 0621 1 РИС. 3.2. Пример таблицы партий заказов Однако комбинация из номера заказа и номера товара уникальна. Поэтому, объединив два столбца, можно сформировать первичный ключ таблицы. Уникальный первичный ключ получится и при объединении всех трех столбцов таблицы. Однако столбец количества товара (quantity) не обязателен для обеспечения Уникальности, и, следовательно, использовать его не нужно. Теперь сформулируем Ще ряд свойств, характеризующих хороший первичный ключ: ¦ Составной первичный ключ должен включать в себя наименьшее число столбцов, необходимых для обеспечения уникальности ключа. ¦ По мере возможности именами столбцов, используемых в составном первичном ключе, следует назначать идентификаторы, не несущие смысловой значимости. 40 Часть первая • Теория Отношения единого ключа Вполне возможно наличие таблицы, каждый столбец которой является частью первичного ключа. В качестве примера рассмотрим каталог некоторой библиотеки. Название каждой книги, хранящейся в библиотеке, имеет естественный уникальный первичный ключ — международный стандартный номер книги (ISBN — International Standard Book Number). Каждый ISBN назначается одному или нескольким предметным указателям каталога библиотеки; каждый предметный указатель (subject heading) также назначается одной или нескольким книгам. Таким образом, между книгами и предметными указателями существует взаимоотношение типа "многие-ко-многим". Отношение для описания этого взаимоотношения можно выразить следующим образом: subject catalog (isbn, subject heading) Все, что нужно сделать,— это попарно сгруппировать предметные указатели и идентификаторы книг. Никаких дополнительных данных здесь не требуется. Следовательно, все столбцы этой таблицы становятся частью первичного ключа. С хранением в базе данных отношений единого ключа не возникает абсолютно никаких сложностей. В действительности они создаются всякий раз, когда в базе данных присутствует составная сущность без данных взаимоотношения. Они не всегда являются ошибкой, и при необходимости их можно применять. Взаимоотношения данных в базе В предшествующем разделе говорилось об использовании идентификаторов в более чем одном отношении. Именно так в реляционных базах данных представляются взаимоотношения между сущностями. Рассмотрим три таблицы, изображенные на рис. 3.3. Имя каждой таблицы на этом рисунке имеет прямую аналогию с именем соответствующей сущности ER-диаграммы Lasers Only. Таблица заказов (orders) (сущность заказов) идентифицируется номером заказа (order number) — произвольным уникальным первичным ключом, назначаемым в Lasers Only. Таблица пунктов заказов (items) (сущность пунктов заказов) идентифицируется номером товара — другим произвольным уникальным первичным ключом. Третья таблица — пунктов ассортимента (order_lines) (сущность пунктов ассортимента) — сообщает компании, какие пункты частью какого заказа являются. А** данной таблицы необходим составной первичный ключ, так как в нескольких заказа-может фигурировать несколько пунктов. Однако выбор первичного ключа имеет боль шее значение, чем простая однозначная идентификация каждой строки; помимо все прочего, при этом представляется взаимоотношение между пунктами ассортимент заказами, в которых они фигурируют, и заказываемыми товарами. Глава 3 • Реляционная модель данных 41 ms rn numbe г Title Distributor number Price 1002 Star Wars: Special Edition 002 39.95 1003 Die Hard 004 29.95 1004 Bambi 006 29.95 Orders Order number 11100 11101 11102 Order date Customer number 0012 12/18/00 0186 12/18/00 0056 12/18/00 Item number Quantity Shipped? 1001 1002 1002 1002 1003 1001 Y Y Y N N N VHC. 3.3. Отношения базы данных Lasers Only Столбец item number отношения order_lines совпадает с первичным ключом таб- Цы items. Это говорит о наличии взаимоотношения типа "один-ко-многим" между Умя таблицами. Аналогично взаимоотношение "один-ко-многим" существует и меж- -У таблицами orders и orderjines, поскольку столбец order number таблицы order_Jines впадает с первичным ключом таблицы orders. Ьсли в таблице содержится столбец, совпадающий с первичным ключом некото-' и таблицы, этот столбец называется внешним ключом (foreign key). Взаимосвязь ЖДУ внешними и первичными ключами представляет взаимоотношения данных 1 42 |
|
|