Книга: Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Отношение один-к-одному
Отношение один-к-одному
Структуры один-к-одному могут быть полезными, когда сущность в вашей модели данных имеет множество различных атрибутов, из которых только к некоторым часто осуществляется доступ. Это может резко сократить занимаемую память и время чтения страниц, если хранить случайные данные в необязательных "подчиненных" отношениях, которые используют соответствующие первичные ключи.
Отношение один-к-одному похоже на отношение один-ко-многим в том смысле, что оно связывает внешний ключ с уникальным ключом. Разница здесь в том, что связываемый ключ должен быть уникальным для поддержания отношения один-к-одному - чтобы соединить не более одной зависимой строки с одной родительской строкой.
Обычным является дублирование столбца (столбцов) первичного ключа в подчиненной таблице в качестве внешнего ключа для "родительской".
CREATE TABLE PARENT_PEER (
ID INTEGER NOT NULL,
MORE_DATA VARCHAR(10),
CONSTRAINT PK_PARENT_PEER PRIMARY KEY(ID),
CONSTRAINT FK_PARENT_PEER_PARENT
FOREIGN KEY (ID) REFERENCES PARENT);
Результатом такого дублирования является создание двух обязательных индексов для столбца первичного ключа подчиненной таблицы: один для первичного ключа и один для внешнего ключа. Индекс внешнего ключа сохраняется так, как если бы он не был уникальным.
В версиях 1.0.x и 1.5 оптимизатор игнорирует первичный индекс подчиненной таблицы. Например:
SELECT PARENT.ID, PARENT_PEER.ID,
PARENT.DATA, PARENT_PEER.MORE_DATA
FROM PARENT JOIN PARENT_PEER
ON PARENT.ID = PARENT_PEER.ID;
игнорирует индекс первичного ключа подчиненной таблицы и создает план:
PLAN JOIN (PARENT_PEER NATURAL, PARENT INDEX (PK_PARENT) )
Влияние на производительность "разреженного" ключа (такого, какой использован в этом примере) не может быть сильным. В случае составного ключа эффект может быть значительным, особенно в случае множественных соединений, включающих отношения один-к-одному. Следует рассмотреть использование суррогатного ключа в структурах один-к-одному[51].
! ! !
СОВЕТ. Не будет плохо, если вы решите добавить специальный столбец для подчиненного отношения с целью разделения первичного и внешнего ключей. Это может оказаться полезным и для документирования.
. ! .
- Отношения типа один-ко-многим
- Отношения типа один-к-одному
- Каждая папка в Проводнике выглядит по-разному. Как привести все к одному виду?
- Я работаю на компьютере не один. Как настроить Windows для нескольких пользователей?
- Бывает, что много файлов удаляется быстро, а один файл может удаляться несколько минут. В чем причина?
- ДЖОН ФОН НЕЙМАН: ОДИН ИЗ САМЫХ БЛЕСТЯЩИХ УМОВ XX ВЕКА
- Я установил еще один винчестер, однако Windows XP его не распознает. Что можно сделать?
- Материнская плата имеет возможность организации RAID-массивов из двух SATA-дисков. Можно ли подключить к ней только один...
- При установке Windows ХР с загрузочного диска после тестирования программа установки сообщает, что не найден ни один жес...
- Еще один простой шаг к созданию сайта
- Система просит вставить диск Windows XP и Windows XP Service Pack 2 CD. Но ведь диск с дистрибутивом Windows у меня один...
- Глава 5 Пятнадцать минут одиночества