Наиболее близкая вещь, которую я имею к шаблону, заключается в следующем: любые две сущности, имеющие отношение «многие ко многим», требуют ассоциативной сущности (таблицы перекрестных ссылок) между ними, вот так (предположим, суррогатные ключи): 1001 *
CREATE TABLE CUSTOMER_XREF_PHONE
( CUSTOMER_ID NUMBER NOT NULL,
PHONE_NUMBER_ID NUMBER NOT NULL,
CONSTRAINT CUSTOMER_XREF_PHONE_PK
PRIMARY KEY (CUSTOMER_ID, PHONE_NUMBER_ID),
CONSTRAINT CUSTOMER_XREF_PHONE_UK
UNIQUE (PHONE_NUMBER_ID, CUSTOMER_ID),
CONSTRAINT CUSTOMER_XREF_PHONE_FK01
FOREIGN KEY (CUSTOMER_ID)
REFERENCES CUSTOMER (CUSTOMER_ID) ON DELETE CASCADE,
CONSTRAINT CUSTOMER_XREF_PHONE_FK02
FOREIGN_KEY (PHONE_NUMBER_ID)
REFERENCES PHONE_NUMBERS (PHONE_NUMBER_ID) ON DELETE CASCADE
);
Такой шаблон реализации может:
Быть полностью защищенным ограничениями ссылочной целостности на уровне базы данных
Поддержка двунаправленного доступа (иногда вам нужно узнать, у кого еще есть этот номер телефона)
Быть самоочищающимся, если ваша база данных поддерживает ON DELETE CASCADE
Расширяться за счет использования атрибута «тип отношения» для отображения нескольких независимых отношений между объектами,
такие как:
- У клиента есть домашний телефон
- клиент имеет дневной номер телефона
- клиент имеет номер факса
- Клиент имеет номер мобильного телефона