[database] В чем разница между идентифицирующими и неидентифицирующими отношениями?



Answers

Существует другое объяснение от реального мира:

Книга принадлежит владельцу, а владелец может владеть несколькими книгами. Но книга может существовать и без владельца, и владение ею может измениться от одного владельца к другому. Взаимоотношения между книгой и владельцем являются неидентифицирующими отношениями.

Книга, однако, написана автором, и автор мог написать несколько книг. Но книга должна быть написана автором - она ​​не может существовать без автора. Таким образом, отношения между книгой и автором являются идентифицирующей связью.

Question

Я не смог полностью понять различия. Можете ли вы описать обе концепции и использовать примеры реального мира?




Вот хорошее описание:

Отношения между двумя объектами могут быть классифицированы как «идентифицирующие» или «неидентифицирующие». Идентификация отношений существует, когда первичный ключ родительского объекта включен в первичный ключ дочернего объекта. С другой стороны, не идентифицирующая связь существует, когда первичный ключ родительского объекта включен в дочерний объект, но не как часть первичного ключа дочернего объекта. Кроме того, не идентифицирующие отношения могут быть далее классифицированы как «обязательные» или «необязательные». Обязательная неидентификационная связь существует, когда значение в дочерней таблице не может быть нулевым. С другой стороны, необязательная неидентификационная связь существует, когда значение в дочерней таблице может быть нулевым.

http://www.sqlteam.com/article/database-design-and-modeling-fundamentals

Вот простой пример идентификации:

Parent
------
ID (PK)
Name

Child
-----
ID (PK)
ParentID (PK, FK to Parent.ID) -- notice PK
Name

Вот соответствующая неидентифицирующая связь:

Parent
------
ID (PK)
Name

Child
-----
ID (PK)
ParentID (FK to Parent.ID) -- notice no PK
Name



Относительная связь между двумя сильными сущностями. Неидентифицирующее отношение не всегда может быть отношением между сильным сущностью и слабым сущностью. Может существовать ситуация, когда сам ребенок имеет первичный ключ, но существование его объекта может зависеть от его родительского объекта.

Например: между продавцом и книгой, где книга продается продавцом, может существовать, когда у продавца может быть свой первичный ключ, но его сущность создается только тогда, когда книга продается

Ссылка, основанная на Билле Карвине




Атрибуты, перенесенные из родительской в ​​дочернюю, идентифицируют 1 ребенка?

  • Если да : существует идентификационная зависимость, отношения идентифицируются, а дочерняя сущность «слаба».
  • Если нет : идентификационная зависимость не существует, связь не идентифицируется, а дочерняя сущность «сильная».

Обратите внимание, что идентификационная зависимость подразумевает зависимость от существования, но не наоборот. Каждый не-NULL FK означает, что ребенок не может существовать без родителя, но только это не определяет отношения.

Подробнее об этом (и некоторых примерах) см. Раздел «Идентификация отношений» Руководства по методу ERwin .

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

1 FK ребенка является частью ограничения PRIMARY KEY ребенка или (не-NULL) UNIQUE.




Не идентифицирующие отношения

Неидентифицирующая связь означает, что ребенок связан с родителем, но он может быть идентифицирован по своему усмотрению.

PERSON    ACCOUNT
======    =======
pk(id)    pk(id)
name      fk(person_id)
          balance

Отношения между ACCOUNT и PERSON не идентифицируются.

Идентификация отношений

Определяющая связь означает, что родительский элемент необходим для предоставления личности ребенку. Ребенок существует исключительно из-за родителя.

Это означает, что внешний ключ также является первичным ключом.

ITEM      LANGUAGE    ITEM_LANG
====      ========    =========
pk(id)    pk(id)      pk(fk(item_id))
name      name        pk(fk(lang_id))
                      name

Отношения между ITEM_LANG и ITEM определяются. И между ITEM_LANG и LANGUAGE.




Скажем, у нас есть эти таблицы:

user
--------
id
name


comments
------------
comment_id
user_id
text

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




Идентификация relaionship означает, что дочерний объект полностью зависит от существования родительского объекта. Пример таблицы персонализированной таблицы учетных записей и personaccount. Таблица счетов человека идентифицируется только наличием таблицы учета и лица.

Несвязанное отношение означает, что дочерняя таблица не идентифицируется по наличию примера родительской таблицы, поскольку таблица является таковой как accounttype, а таблица account.accounttype не идентифицируется с указанием таблицы счетов.




Links