Ограничения внешнего ключа полиморфной ассоциации. Это хорошее решение?

Мы используем полиморфные ассоциации в нашем приложении. Мы столкнулись с классической проблемой: мы обнаружили недопустимую ссылку на внешний ключ, и мы не можем создать ограничение внешнего ключа, потому что это полиморфная ассоциация.

Тем не менее, я провел много исследований по этому поводу. Я знаю недостатки использования полиморфных ассоциаций и достоинства. Но я нашел подходящее решение:

http://blog.metaminded.com/2010/11/25/stable-polymorphic-foreign-key-relations-in-rails-with-postgresql/

Это хорошо, потому что вы получаете лучшее из обоих миров. Меня беспокоит дублирование данных. У меня недостаточно глубоких знаний о postgresql, чтобы полностью понять стоимость этого решения.

Что вы думаете? Следует ли полностью избегать этого решения? Или это хорошее решение?

Единственная альтернатива, на мой взгляд, - создать внешний ключ для каждого типа ассоциации. Но затем вы сталкиваетесь с подтверждением существования только одной ассоциации. Это ситуация «выбери свой яд». Полиморфные ассоциации четко описывают намерение, а также делают этот сценарий невозможным. На мой взгляд, это самое главное. Ограничение внешнего ключа базы данных - это скрытая функция, и изменение «намерения» для работы с ограничениями базы данных кажется мне неправильным. Вот почему я хотел бы использовать вышеупомянутое решение, предполагая, что с ним нет явного «избегания».

13
задан Jordan Brough 17 September 2016 в 12:01
поделиться