Entity Framework Базовый столбец внешнего ключа, связанный с несколькими первичными ключами - PullRequest
0 голосов
/ 03 мая 2019

Следующая базовая схема содержит сведения о сотрудниках и менеджерах.Данные, которые являются общими как для сотрудников, так и для менеджеров, хранятся в таблице «Люди», а таблицы «Сотрудники» и «Менеджеры» имеют в качестве внешнего ключа People.Id.

People
======
Id: int
FirstName: varchar(50)
Surname: varchar(50)


Employees
=========
Id: int
PersonId: int (links to Person.Id)
EmployeeRef: varchar(12)


Managers
========
Id: int
PersonId: int (links to Person.Id)
ManagerRef: varchar(12)

Теперь мне нужно записать отсутствие сотрудников.Только сотрудник может иметь запись об отсутствии, но запись об отсутствии может быть подана либо самим сотрудником, либо руководителем.Вот где я застрял с моделированием стола.При запросе с EF Core я хотел бы знать (в одном обращении к базе данных), для кого это отсутствие и кто его поднял.

Именно здесь я застрял на том, как лучше всего смоделировать отсутствие.структура данных.

Вариант 1:

Absences
========
Id: int
EmployeeId: int
AbsenceDate: datetime
RaisedByEmployeeId: int null (links to Employees.Id)
RaisedByManagerId: int null (links to Managers.Id)

Таким образом, либо RaisedByEmployeeId, либо RaisedByManagerId будет содержать внешний ключ для соответствующей таблицы.

Проблемы: это непростой запрос для Entity Framework, поскольку необходимо проверить оба навигационных свойства, чтобы узнать, какое из них имеет связанные данные.

Вариант 2:

Absences
========
Id: int
EmployeeId: int
AbsenceDate: datetime
PersonId: int

PersonId ссылается на таблицу Person.

Проблемы: при запросе с EF запрос должен проверять все таблицы, с которыми связан PersonId, чтобы увидеть, какая из них содержит данные.

Вариант 3:

Есть ли лучшийспособ моделировать это?Ни одно из вышеперечисленных решений не кажется таким элегантным.Также возможно добавление большего количества ролей, что означает более сложные проверки для каждого запроса, просто чтобы выяснить, к какой роли принадлежит внешний ключ.

...