Модели первичного ключа и ER - PullRequest
       3

Модели первичного ключа и ER

0 голосов
/ 28 сентября 2010

Скажите, у меня есть модель ER

 _____________
|     E2      |
|_____________|
  |    |    |
  |    |    |
 A21* A22  A23*

, где A21 и A23 являются первичными ключами.

Это будет означать, что первичный ключ для E2 будет

ПЕРВИЧНЫЙ КЛЮЧ (A21, A23)?

Если это так, то в чем отличие диаграммы ниже.

 _____________
|  E2         |
|_____________|
  |    |    |
  |    |    |
  []---|----[]---[]
  |    |    |
  |    |    |
 A21* A22  A23*

где [] - представление комбинации первичных ключей. это то же самое, что и предыдущая диаграмма и первичный ключ ПЕРВИЧНЫЙ КЛЮЧ (A21, A23)?

Тогда, основываясь на первой диаграмме, должен ли быть SQL-код, может ли оператор ССЫЛКИ E2 (A21) и ССЫЛКИ E2 (A23) существуют? Или мы должны всегда ссылаться на все первичные ключи в таблице?

Надеюсь, мой вопрос достаточно ясен.

Ответы [ 3 ]

1 голос
/ 28 сентября 2010

Я не распознаю используемую вами схему обозначений (обозначение клавиш звездочками).Обычно в диаграмме ER ключевые атрибуты подчеркнуты (нотация Чена) или отделены от других атрибутов линией (IDEF1X).

Одним из ограничений большинства нотаций ER является то, что они не облегчаютпоказать несколько ключей-кандидатов.Часто отображается только один ключ («первичный ключ») для каждой сущности.Поэтому я бы сказал, что если на диаграмме показано несколько атрибутов ключа, то, вероятно, все они являются частью одного составного ключа.

Внешний ключ должен ссылаться только на весь ключ-кандидат, а нечасти ключа.

0 голосов
/ 28 сентября 2010

Изображение происходит от этого вопроса / ответа , я буду использовать его для иллюстрации нескольких основных моментов.

  1. Внешние ключи ссылаются на полные первичные ключи.

  2. ER довольно хорошо представляет составные ключи.

  3. Существует довольно много хороших инструментов ER (некоторые с открытым исходным кодом) - используйте один.

Взгляните на Answer стол

create table Answer (
      SurveyID        integer
    , QuestionID      integer
    , OfferedAnswerID integer
    , PersonID        integer
    , OtherText       varchar (2000)
);

alter table Answer
    add constraint pk_answer
                   primary key (SurveyID, QuestionID, OfferedAnswerID, PersonID)

  , add constraint fk2_answer
                   foreign key (SurveyID, QuestionID, OfferedAnswerID)
                   references Survey_Question_Answer (SurveyID, QuestionID, OfferedAnswerID)

  , add constraint fk1_answer
                   foreign key (PersonID) references Person (PersonID)
;

alt text

0 голосов
/ 28 сентября 2010

при условии, что я правильно понимаю ваш вопрос, sql для таблицы будет

CREATE TABLE AKS.E2 (a21 NUMBER, a22 NUMBER, a23 NUMBER);

ALTER TABLE AKS.E2 ADD(CONSTRAINT E2_PK PRIMARY KEY (a21, a23));

вы можете иметь ограничения внешнего ключа, например, ссылки E2 (A21) или ссылки E2 (A23), даже если они ссылаются на частичные ключи первичного ключа компоновки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...