ER к реляционной модели: что происходит, когда подкласс имеет свой собственный PK?
Концептуальная модель| Я не смог найти ни одного примера подкласса с его собственным PK. Я понимаю, что первичный ключ person_id унаследован от суперкласса, но я не знаю, объединяется ли он с подклассом PK, employee_id, для создания составного PK в реляционной модели подкласса.
В принципе, что правильно?
Сотрудник (employee_id, person_id, имя, зарплата)
ИЛИ ЖЕ
Сотрудник (employee_id, person_id, имя, зарплата)
Предполагая, что иерархия не является обязательной.
Это всего лишь быстрый пример, чтобы помочь мне понять процесс, поэтому не беспокойтесь о достоинстве концептуальной модели.
2 ответа
Во-первых, как указал Джим Л, Employee
это подтип Person
и не наоборот!
Концептуально, если тип объекта B является подтипом / подклассом A, он наследует свои свойства, методы и ограничения, включая его уникальные идентификаторы / ключи, но не обязательно его стандартный идентификатор ("PK"), поскольку PK является произвольным выбором обязательный ключ, так что это не чисто концептуальная / логическая функция, а декларация / соглашение пользователя.
Ключи, как ограничения, наследуются, но не PK!
Поэтому, даже если подтип Employee
наследует обязательный ключ person_id
Вам не нужно выбирать его в качестве ПК. поскольку Employee
случается, есть другой обязательный ключ, employee_id
Вы можете выбрать этот как PK (и, как указывает reaanb, в этом примере нет необходимости в каком-либо составном PK).
Составной PK - плохая идея - он позволяет записывать несколько строк с одинаковым employee_id и разными person_id (или одинаковыми person_id и разными employee_id). Скорее сделайте employee_id PK и person_id отдельным уникальным ключом.
Концептуально, когда подтип имеет свою собственную идентичность, его можно рассматривать как отдельный набор сущностей с отношением к набору родительских сущностей, а не подтип. Я бы не использовал обозначение подтипов в диаграмме EER для представления этих ситуаций.
Наконец, пожалуйста, избегайте использования терминологии ООП (подклассы, наследование) при обсуждении моделирования данных. ООП предназначен для декомпозиции систем в терминах взаимодействующих конечных автоматов, и его не следует сопоставлять с иерархическими, сетевыми, объектно-связанными или реляционными моделями данных.