2010-09-28 3 views
0

Скажут у меня есть модель ERПервичные и ER модели

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

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

это означало бы первичный ключ для Е2 будет

PRIMARY KEY (A21, A23)?

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

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

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

Тогда на основе первой диаграммы должен быть код SQL, может ли быть оператор . ССЫЛКИ E2 (A21) И СПРАВОЧНЫЕ МАТЕРИАЛЫ E2 (A23) существуют? Или мы всегда должны ссылаться на все первичные ключи в таблице?

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

+0

Вы используете ER для сбора анализа данных или структуры базы данных? Один и тот же инструмент диаграмм может быть использован для обоих. Некоторые люди не делают различия между ними. –

ответ

-1

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

CREATE TABLE AKS.E2 ( a21 НОМЕР, a22 НОМЕР, a23 НОМЕР );

ALTER TABLE ADD AKS.E2 ( CONSTRAINT E2_PK ПЕРВИЧНЫЙ КЛЮЧ (а21, а23));

У вас могут быть внешние ключи, такие как ССЫЛКИ E2 (A21) или ССЫЛКИ E2 (A23), даже если они ссылаются на частичные ключи основного первичного ключа.

+1

Я не думаю, что вы можете ссылаться только на часть первичного ключа. [из Википедии] (http://en.wikipedia.org/wiki/Foreign_key) «Столбцы в таблице ссылок должны быть первичным ключом или другим ключом-кандидатом в ссылочной таблице». С какой СУБД вы это сделаете? – pascal

+0

Итак, хорошо, поэтому мы должны использовать первую таблицу, утверждения. ССЫЛКИ E2 (A21) И СПРАВОЧНЫЕ МАТЕРИАЛЫ E2 (A23) не могут существовать правым паскалем? – ali

+0

в стандартном SQL и в большинстве СУБД вы не можете создавать ссылочные ограничения, которые ссылаются на составной ключ. Они должны полностью ссылаться на полный список столбцов в ограничении уникальности. – sqlvogel

1

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

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

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

0

Изображение из this question/answer, я буду использовать его, чтобы проиллюстрировать несколько основных пунктов.

  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

Смежные вопросы