Так, я читал при идентификации по сравнению с неидентификацией отношений в моем проектировании баз данных и многих ответов на ТАК кажутся противоречием мне. Вот эти два вопроса, на которые я смотрю:
Смотрение на вершину отвечает от каждого вопроса, я, кажется, получаю две различных идеи того, каковы отношения идентификации.
Ответ первого вопроса говорит, что отношения идентификации "описывают ситуацию, в которой существование строки в дочерней таблице зависит от строки в родительской таблице". Пример этого, которое дано, "Автор может записать много книг (1 к n отношениям), но книга не может существовать без автора". Это имеет смысл мне.
Однако, когда я считал ответ на вопрос два, я запутываюсь, как он говорит, "если ребенок определяет его родителя, это - отношения идентификации". Ответ затем продолжает давать примеры, такие как Номер социального страхования (определяет Человека), но адрес не (потому что многие люди могут жить в адресе). Мне это больше походит на случай решения между первичным ключом и непервичным ключом.
Мое собственное инстинктивное чувство (и дополнительное исследование в области других сайтов) указывает на первый вопрос и его ответ, являющийся корректным. Однако я хотел проверить, прежде чем я продолжал вперед, поскольку я не хочу изучать что-то не так, поскольку я работаю для понимания проектирования баз данных.Заранее спасибо.
) Техническое определение идентифицирующей связи состоит в том, что внешний ключ дочернего элемента является частью его первичного key.
CREATE TABLE AuthoredBook (
author_id INT NOT NULL,
book_id INT NOT NULL,
PRIMARY KEY (author_id, book_id),
FOREIGN KEY (author_id) REFERENCES Authors(author_id),
FOREIGN KEY (book_id) REFERENCES Books(book_id)
);
См.? book_id
- это внешний ключ, но он также является одним из столбцов в первичном ключе.Таким образом, эта таблица имеет идентифицирующую связь с таблицей, на которую указывает ссылка Books
. Точно так же он имеет идентифицирующую связь с авторами
.
Комментарий к видео YouTube имеет идентифицирующую связь с соответствующим видео. video_id
должен быть частью основного ключ таблицы Комментарии
.
CREATE TABLE Comments (
video_id INT NOT NULL,
user_id INT NOT NULL,
comment_dt DATETIME NOT NULL,
PRIMARY KEY (video_id, user_id, comment_dt),
FOREIGN KEY (video_id) REFERENCES Videos(video_id),
FOREIGN KEY (user_id) REFERENCES Users(user_id)
);
Это может быть трудно понять, потому что в наши дни стало обычной практикой использовать только последовательный суррогатный ключ вместо составного первичного ключа:
CREATE TABLE Comments (
comment_id SERIAL PRIMARY KEY,
video_id INT NOT NULL,
user_id INT NOT NULL,
comment_dt DATETIME NOT NULL,
FOREIGN KEY (video_id) REFERENCES Videos(video_id),
FOREIGN KEY (user_id) REFERENCES Users(user_id)
);
Это может скрыть случаи, когда таблицы имеют идентифицирующую связь.
Я бы не рассматривал SSN как представление идентифицирующей связи. Некоторые люди существуют, но у них нет SSN. Другие люди могут подать заявку на получение нового SSN. Таким образом, SSN на самом деле является просто атрибутом, а не частью первичного ключа человека.
Re comment from @Niels:
Итак, если мы используем суррогатный ключ вместо составного первичного ключа, не будет заметной разницы между использованием идентифицирующих или неидентифицирующих отношений?
Полагаю, да. Я не решаюсь сказать да, потому что мы не изменили логические отношения между таблицами с помощью суррогатного ключа. То есть вы по-прежнему не можете оставить комментарий, не ссылаясь на существующее видео. Но это просто означает, что video_id не должен быть NULL. И логический аспект для меня действительно важен в выявлении отношений.
Но есть и физический аспект установления отношений. И это тот факт, что столбец внешнего ключа является частью первичного ключа (первичный ключ не обязательно является составным ключом, это может быть один столбец, который является как первичным ключом комментариев, так и внешним ключом для таблицы видео. , но это будет означать, что вы можете хранить только один комментарий для каждого видео).
Выявление взаимосвязей кажется важным только для построения диаграмм сущностей-взаимосвязей, и это проявляется в инструментах моделирования данных графического интерфейса пользователя.
«поскольку я не хочу узнать что-то не так».
Что ж, если вы действительно это имеете в виду, то можете перестать беспокоиться о жаргоне и терминологии ER. Он неточный, запутанный, сбивающий с толку, совершенно не согласованный и по большей части не имеющий отношения к делу.
ER - это набор прямоугольников и прямых линий, нарисованных на листе бумаги. ER намеренно предназначен для неформального моделирования. По сути, это ценный первый шаг в проектировании базы данных, но это также всего лишь первый шаг.
ER-диаграмма никогда не сможет приблизиться к точности, точности и полноте проекта базы данных, формально записанного в D.
Да, выбирайте первое, но я не думаю, что второе противоречит первому. Просто формулировка немного запутанная...
UPDATE:
Только что проверил - ответ на второй вопрос неверен в некоторых предположениях... отношение книга-автор не обязательно 1:n, оно может быть и m:n. В реляционных базах данных для этого отношения m:n создается таблица пересечения, и вы получаете идентифицирующие отношения между таблицей пересечения и двумя другими таблицами...
Идентифицирующие / неидентифицирующие отношения являются понятиями в ER-моделировании - отношение является идентифицирующим, если оно представлено внешним ключом, который является частью первичного ключа ссылающейся таблицы. Это обычно не имеет большого значения в терминах реляционного моделирования, потому что первичные ключи в реляционной модели и в базах данных SQL не имеют особого значения или функции, как в ER-модели.
Например, предположим, что в вашей таблице введены два кандидатных ключа, A и B. Предположим, что A также является внешним ключом в этой таблице. Представленная таким образом связь считается "идентифицирующей", если А назначен "первичным" ключом, но она не является идентифицирующей, если В является первичным ключом. Тем не менее, форма, функция и смысл таблицы идентичны в каждом случае! Вот почему, на мой взгляд, я не думаю, что концепция идентифицирующего/неидентифицирующего ключа действительно очень важна.