Начнем с определений и примеров каждого из понятий:
Полное и частичное участие:
Полное участие (обозначаемое двойной или толстой линией ассоциации) означает, что все сущности в наборе сущностей должны участвовать в связи. Частичное участие (обозначенное одной тонкой линией) означает, что в наборе сущностей могут быть сущности, которые не участвуют в отношениях.
Medicine
полностью участвует в отношениях Produce
, а это означает, что Medicine
не может существовать, если Produced
не связано с Laboratory
. Напротив, Laboratory
может существовать без Producing
Medicine
- Laboratory
частично участвует в отношениях Produce
.
Обязательные и необязательные роли:
В отношениях роли могут быть необязательными или обязательными. Это влияет на то, может ли экземпляр отношения существовать без сущности в данной роли. Обязательные роли обозначены сплошной ассоциативной линией, необязательные роли — пунктирной линией.
Роли не часто упоминаются в учебниках по базам данных, но это важная концепция. Рассмотрим брак — отношения с двумя обязательными ролями, исполняемыми одним и тем же набором сущностей. В большинстве отношений наборы сущностей также определяют роли, но когда набор сущностей появляется несколько раз в одном отношении, мы различаем их по разным ролям.
В приведенном выше примере Patient
может Purchase
Medicine
с Prescription
или без него. Purchase
не может существовать без Patient
и Medicine
, но Prescription
является необязательным (в целом, хотя может потребоваться в определенных случаях).
Выявление взаимосвязи/слабой сущности:
Слабый объект — это объект, который не может быть идентифицирован по собственным атрибутам и поэтому имеет ключ другого объекта как часть своего собственного. Идентифицирующая связь — это связь между слабым объектом и его родительским объектом. Идентифицирующая связь, и слабая сущность обозначены двойными границами. Слабые наборы сущностей обязательно должны полностью участвовать в своих идентифицирующих отношениях.
В этом примере Prescription
содержит LineItems
, которые идентифицируются ключом Prescription
и номером строки. Другими словами, таблица LineItems
будет иметь составной ключ (Prescription_ID, Line_Number)
.
Примеры неидентифицирующих отношений см. в предыдущих примерах. Хотя Medicine
полностью участвует в отношениях Produce
, у него есть собственная идентичность (например, суррогатный ключ, хотя я его не указывал). Обратите внимание, что суррогатные ключи всегда подразумевают обычные сущности.
Обязательное/факультативное участие в сравнении с полным/частичным участием
Обязательные или необязательные роли указывают, требуется ли определенная роль (со связанным с ней набором сущностей) для существования отношения. Полное или частичное участие указывает, требуются ли определенные отношения для существования объекта.
Обязательное частичное участие: См. выше: Laboratory
может существовать без производства лекарств, но Medicine
не может быть Produced
без Laboratory
.
Обязательное полное участие: См. выше: Medicine
не может существовать, не будучи Produced
, а Laboratory
не может Produce
чего-то неопределенного.
Необязательное частичное участие: см. выше: Prescription
может существовать, не будучи Purchased
, а Purchase
может существовать без Prescription
.
Это оставляет необязательное полное участие, о котором мне пришлось немного подумать, чтобы найти пример:
Некоторые Patients
Die
неизвестного Cause
, но Cause
смерти не может существовать без Patient
Dying
ее.
Полное/частичное участие в сравнении с идентифицирующими/неидентифицирующими отношениями
Как я уже говорил, наборы слабых сущностей всегда полностью участвуют в своих идентифицирующих отношениях. См. выше: LineItem
должен быть Contained
в Prescription
, от этого зависит его идентичность и существование. Частичное участие в идентифицирующих отношениях невозможно.
Полное участие не подразумевает идентифицирующих отношений — Medicine
не может существовать, не будучи Produced
Laboratory
, но Medicine
идентифицируется своими собственными атрибутами.
Частичное участие в неидентифицирующих отношениях очень распространено. Например, Medicine
может существовать, не будучи Purchased
, а Medicine
идентифицируется своими собственными атрибутами.
Обязательные/необязательные и идентифицирующие/неидентифицирующие отношения
Для отношений необычно иметь менее двух обязательных ролей. Отношения идентификации являются бинарными отношениями, поэтому родительская и дочерняя роли будут обязательными — отношение Contain
между Prescription
и LineItem
не может существовать без обеих сущностей.
Необязательные роли обычно встречаются только в тройственных и высших отношениях (хотя см. пример пациентов, умирающих от причин), и не участвуют в идентификации. Альтернативой необязательной роли является отношение на отношении:
Превратив Purchase
в ассоциативный объект, мы можем заставить его участвовать в отношениях Fill
с Prescription
. Чтобы сохранить ту же семантику, что и выше, я указал, что Purchase
может только Fill
один Prescription
.
Физическое моделирование
Если мы перейдем от концептуальной модели к физической (пропустив логическое моделирование/дальнейшую нормализацию), создав отдельные таблицы для каждой сущности и отношения, все будет выглядеть очень похоже, хотя вы должны знать, как читать индикаторы кардинальности в строках внешнего ключа, чтобы восстановить ER-семантика.
Однако обычно денормализуют таблицы с одними и теми же первичными ключами, что означает, что отношения «один ко многим» объединяются с таблицей сущностей на стороне многих:
Отношение физически представлено в виде двух или более ключей сущностей в таблице. В этом случае ключи сущности — patient_id
и cause_of_death_id
— оба находятся в таблице Patient
. Многие люди думают, что линия внешнего ключа представляет связь, но это происходит из-за того, что модель сущность-связь смешивается со старой сетевой моделью данных.
Это ключевой момент — чтобы понять различные виды отношений и ограничения на отношения, важно понять, какие отношения являются первыми. Отношения в ER — это ассоциации между ключами, а не между таблицами. Связь может иметь любое количество ролей разных наборов сущностей, в то время как ограничения внешнего ключа накладывают ограничение подмножества между двумя столбцами одного набора сущностей. Теперь, вооружившись этим знанием, прочитайте еще раз весь мой ответ. ;)
Надеюсь, это поможет. Не стесняйтесь задавать вопросы.
person
reaanb
schedule
26.06.2016