В настоящее время я сталкиваюсь с проблемой и задаюсь вопросом, существует ли лучшее решение для этого случая.Изначально у меня есть три объекта, A, B и X. Их отношения таковы:
- AB: 1-ко-многим
- AX: 1-ко-многим
- BX: 1-ко-многим
Например, одна строка в A может ассоциироваться со многими строками как в B, так и в X. Кроме того, одна строка в B может иметь много других связанных строкв X.
Некоторые из рассмотренных мною вариантов:
Дубликат X
Итак, у нас есть AB, A-X1 и B-X2в котором X1 и X2 идентичны, просто другое имя таблицы.
Использовать полиморфную ассоциацию
X теперь имеет два столбца parent и parent_id , указывающий, с какой таблицей, A или B, связана строка.
Реверс полиморфной ассоциации
Созданы две дополнительные таблицы, AX и BX,Связь проста.
A - AX - X - BX - B
Используйте дополнительный внешний ключ для X.
X теперь имеет два столбца: A_id и B_id .Если строка связана с A, то B_id равно нулю.Если строка связана с B, то A_id = A.id и B_id = B.id.
Конечно, все они имеюткомпромиссные.Интересно, есть ли лучшие решения для этой проблемы.Пожалуйста, предложите любого, кого вы знаете.
Спасибо!