2016-02-22 5 views
1

моем случае это:Polymorph против Relation Mysql с Laravel

У меня есть 2 решения для моей базы данных:

  1. Один стол из Адрес с polimorph

  2. Один стол из Адрес с отношениями к другим таблицам

Для дать более подробную информацию об этом, в sumary моих таблиц имеет эти столбцы:

Дело PolyMorph - без всякого отношения

Таблица адресов:

AddressId INT 
Address VARCHAR(...) - Street, Number.... 
OwnerType VARCHAR(...) - Type of owner informed Address, like **Customer** 
OwnerId INT - Id of owner, in this case **CustumerId** 

Таблица Заказчик:

CustumerId 
CustumerName VARCHAR(...) 

Дело Relation - многие ко многим

Address Table:

AddressId INT 
Address VARCHAR(...) - Street, Number.... 

клиентов Таблица:

CustumerId 
CustumerName VARCHAR(...) 

CostumerAddress Таблица: (соотношение M2M)

CustumerId INT 
AddressId INT 

Вопрос

В обоих случаях дайте мне весь адрес хранителей, в сценарии «Многим-многим». Но кто лучше? Мне нужно профи и минус для обоих случаев.

спасибо за чтение!

ответ

1

Ответ на этот вопрос должен быть частично найден спрашивая себя: «Что мне нужно?».

Как я понимаю, полиморфный подход, который вы обозначили, является отношением one to many, которое позволит владельцу или клиенту иметь много адресов, тогда как подход many to many позволит владельцу/клиенту иметь много адресов и адресов многие владельцы/клиенты. Поэтому имейте в виду, что вы смотрите на два разных типа: one to many (полиморфный) или many to many.

Преимущества использования полиморфного подхода обычно заключается в том, что вы не ограничены тем, с какой моделью связана другая модель, с одной стороны отношения. Это обеспечивает большую гибкость и, например, в вашем сценарии, позволит вам создать несколько таблиц addresses для каждой модели, для которой требуется адрес.

Например, если вы имели customers таблицу, которая была связана с customer_addresses стола и owners таблицы, связанной с owner_addresses таблицы, вы могли бы решить это дублирование с помощью полиморфного отношения, имея одну addresses таблицы, которая связана с либо owners или customers, столбец, представляющий таблицу/модель и сопровождающий первичный ключ для таблицы/модели.

Проверьте документацию для получения более подробной информации: https://laravel.com/docs/5.2/eloquent-relationships#polymorphic-relations

Вы также можете иметь many to many полиморфные отношения в Laravel см документации для получения более подробной информации: https://laravel.com/docs/5.2/eloquent-relationships#many-to-many-polymorphic-relations

1

Это зависит ...

если ваша поддержка бизнес-роль многие обращаются ко многим клиентам, реализует многие ко многим.

Если нет, полиморф лучше.

  • Владелец -> базовый класс
  • Владелец расширяет Адрес
  • Заказчик расширяет Владелец

Я надеюсь, что я помог =]

Смежные вопросы