Все еще перепутанный идентификацией по сравнению с неидентификацией отношений

Так, я читал при идентификации по сравнению с неидентификацией отношений в моем проектировании баз данных и многих ответов на ТАК кажутся противоречием мне. Вот эти два вопроса, на которые я смотрю:

  1. Каково различие между идентификацией и неидентификацией отношений
  2. Выбор проблемы идентификации или неидентификации отношений

Смотрение на вершину отвечает от каждого вопроса, я, кажется, получаю две различных идеи того, каковы отношения идентификации.

Ответ первого вопроса говорит, что отношения идентификации "описывают ситуацию, в которой существование строки в дочерней таблице зависит от строки в родительской таблице". Пример этого, которое дано, "Автор может записать много книг (1 к n отношениям), но книга не может существовать без автора". Это имеет смысл мне.

Однако, когда я считал ответ на вопрос два, я запутываюсь, как он говорит, "если ребенок определяет его родителя, это - отношения идентификации". Ответ затем продолжает давать примеры, такие как Номер социального страхования (определяет Человека), но адрес не (потому что многие люди могут жить в адресе). Мне это больше походит на случай решения между первичным ключом и непервичным ключом.

Мое собственное инстинктивное чувство (и дополнительное исследование в области других сайтов) указывает на первый вопрос и его ответ, являющийся корректным. Однако я хотел проверить, прежде чем я продолжал вперед, поскольку я не хочу изучать что-то не так, поскольку я работаю для понимания проектирования баз данных.Заранее спасибо.

74
задан pnuts 3 January 2019 в 13:37
поделиться

4 ответа

) Техническое определение идентифицирующей связи состоит в том, что внешний ключ дочернего элемента является частью его первичного 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. И логический аспект для меня действительно важен в выявлении отношений.

Но есть и физический аспект установления отношений. И это тот факт, что столбец внешнего ключа является частью первичного ключа (первичный ключ не обязательно является составным ключом, это может быть один столбец, который является как первичным ключом комментариев, так и внешним ключом для таблицы видео. , но это будет означать, что вы можете хранить только один комментарий для каждого видео).

Выявление взаимосвязей кажется важным только для построения диаграмм сущностей-взаимосвязей, и это проявляется в инструментах моделирования данных графического интерфейса пользователя.

148
ответ дан 24 November 2019 в 11:51
поделиться

«поскольку я не хочу узнать что-то не так».

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

ER - это набор прямоугольников и прямых линий, нарисованных на листе бумаги. ER намеренно предназначен для неформального моделирования. По сути, это ценный первый шаг в проектировании базы данных, но это также всего лишь первый шаг.

ER-диаграмма никогда не сможет приблизиться к точности, точности и полноте проекта базы данных, формально записанного в D.

19
ответ дан 24 November 2019 в 11:51
поделиться

Да, выбирайте первое, но я не думаю, что второе противоречит первому. Просто формулировка немного запутанная...

UPDATE:

Только что проверил - ответ на второй вопрос неверен в некоторых предположениях... отношение книга-автор не обязательно 1:n, оно может быть и m:n. В реляционных базах данных для этого отношения m:n создается таблица пересечения, и вы получаете идентифицирующие отношения между таблицей пересечения и двумя другими таблицами...

1
ответ дан 24 November 2019 в 11:51
поделиться

Идентифицирующие / неидентифицирующие отношения являются понятиями в ER-моделировании - отношение является идентифицирующим, если оно представлено внешним ключом, который является частью первичного ключа ссылающейся таблицы. Это обычно не имеет большого значения в терминах реляционного моделирования, потому что первичные ключи в реляционной модели и в базах данных SQL не имеют особого значения или функции, как в ER-модели.

Например, предположим, что в вашей таблице введены два кандидатных ключа, A и B. Предположим, что A также является внешним ключом в этой таблице. Представленная таким образом связь считается "идентифицирующей", если А назначен "первичным" ключом, но она не является идентифицирующей, если В является первичным ключом. Тем не менее, форма, функция и смысл таблицы идентичны в каждом случае! Вот почему, на мой взгляд, я не думаю, что концепция идентифицирующего/неидентифицирующего ключа действительно очень важна.

11
ответ дан 24 November 2019 в 11:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: