У меня есть три объекта: Пользователь, Офис и Номер телефона.У пользователя много телефонных номеров, и в офисе тоже много телефонных номеров.
Проблема заключается в том, как представить отношения этих сущностей в Учении 2.
Сначала япопытался использовать двунаправленные связи «один ко многим» («Пользователь -> имеет много -> PhoneNumbers») (Office -> «есть много» -> «PhoneNumbers»), «PhoneNumber» имеет два поля сопоставления, одно для пользователя и другое для Office.Это решение не работает, поскольку один из внешних ключей сопоставления не может быть нулевым.
Мой второй подход заключался в использовании двух сущностей и одного суперкласса для PhoneNumber.Суперкласс PhoneNumber определил все общие поля, кроме поля отображения.Сущности UserPhoneNumber и OfficePhoneNumber расширили сущность PhoneNumber и указали другое поле сопоставления и другую таблицу.(одна таблица для OfficePhoneNumbers, другая для UserPhoneNumbers)
Это решение действительно работает, но довольно уродливо иметь 3 класса для представления одной простой сущности.
Мой третийподход заключается в использовании однонаправленного отображения один ко многим.Это устранит необходимость в поле отображения для объекта PhoneNumber.Проблема в том, что когда я использую каскадное удаление для поля многие ко многим, это нарушает ограничение целостности при удалении записей.
Когда я опускаю опцию каскадного удаления, после удаления пользователя или офиса PhoneNumber остается в базе данных (но запись в таблице сопоставления удаляется).
Каков наилучший способ справиться с этим типом ассоциации?
Спасибо