ER в реляционную модель: что происходит, когда у подкласса есть собственный ПК?

Концептуальная модель | Мне не удалось найти ни одного примера подкласса с собственным ПК. Я понимаю, что первичный ключ, person_id, унаследован от суперкласса, но я не знаю, сочетается ли он с PK подкласса, employee_id, для создания составного PK в реляционной модели подкласса.

В принципе, как правильно?

Сотрудник(employee_id, person_id, имя, зарплата)

OR

Сотрудник(employee_id, person_id, имя, зарплата)

Принятие иерархии не является обязательным.

Это всего лишь краткий пример, помогающий мне понять процесс, так что не беспокойтесь о качестве концептуальной модели.


comment
Посылка ошибочна. Обобщение должно быть верным во всех случаях, но Человек не всегда является Сотрудником. Роль (Сотрудник), специализирующаяся на Человеке, также не является хорошей идеей. Это должны быть два отдельных стола.   -  person Jim L.    schedule 19.03.2017


Ответы (2)


Во-первых, как указал Джим Л., Employee является подтипом Person, а не наоборот!

Концептуально, если тип объекта B является подтипом/подклассом A, он наследует его свойства, методы и ограничения, включая его уникальные идентификаторы/ключи, но не обязательно его стандартный идентификатор ("PK"), поскольку PK является произвольным выбором обязательный ключ, так что это не чисто концептуальная/логическая функция, а скорее пользовательская декларация/соглашение.

Ключи, как и ограничения, наследуются, но не ПК!

Следовательно, даже если подтип Employee наследует обязательный ключ person_id, вам не нужно выбирать его в качестве своего PK. Поскольку у Employee есть еще один обязательный ключ, employee_id, вы можете выбрать его в качестве PK (и, как указано reaanb, в этом примере нет необходимости в каком-либо составном PK).

person Gerd Wagner    schedule 08.05.2017

Составной PK — плохая идея, поскольку он позволяет записывать несколько строк с одним и тем же employee_id и разными person_id (или с одним и тем же person_id и разными employee_id). Вместо этого сделайте employee_id PK и person_id отдельным уникальным ключом.

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

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

person reaanb    schedule 19.03.2017
comment
Нет необходимости избегать терминологии объектно-ориентированного моделирования, поскольку диаграммы классов OO/UML просто предоставляют язык моделирования данных/информации, более удобный (и более выразительный), чем диаграммы EER. - person Gerd Wagner; 08.05.2017
comment
Диаграммы классов @GerdWagner предназначены для моделирования систем, а не для моделирования данных. ER и реляционные модели поддерживают n-мерные отношения и предоставляют методы для управления зависимостями и целостностью данных. ООП инкапсулирует и абстрагирует состояние и в лучшем случае поддерживает бинарные направленные ассоциации и не имеет абсолютно никакой встроенной целостности данных. - person reaanb; 08.05.2017
comment
@raanb: Вы просто повторяете устаревшее кредо парней, занимающихся моделированием данных. Диаграммы классов предоставляют богатый язык визуального моделирования, который можно использовать для моделирования информации, данных и классов. Просто загляните на web-engineering.info/JavaJpaJsfApp-Book или в документы ER Conference (er2016.cs.titech.ac.jp), чтобы получить свидание. - person Gerd Wagner; 09.05.2017
comment
@GerdWagner Книга, на которую вы ссылаетесь, описывает все, что я отверг в пользу более глубокого понимания ООП и моделирования данных. Спасибо, но нет. - person reaanb; 09.05.2017
comment
@raanb: Ваше более глубокое понимание кажется принятием желаемого за действительное. - person Gerd Wagner; 09.05.2017
comment
@GerdWagner Связанная книга заново изобретает дореляционную сетевую модель данных, которую обычно (и ошибочно) называют объектной моделью данных. ООП работает для взаимодействующих конечных автоматов (оно берет свое начало в системах моделирования и вычислений) — его использование для моделирования данных нарушает инкапсуляцию, отдает предпочтение навигационному доступу к данным, а не операциям на основе наборов; и не обеспечивает ни выразительности, ни логики реляционной модели, ни каких-либо функций СУБД. Я ценю ваши комментарии, но я остаюсь при том, что я сказал. - person reaanb; 16.05.2017