Все отношения должны быть определены? В этом случае следует также определить отношение «компания-реклама»? Я имею в виду преимущество в том, что вам не нужно присоединяться к множеству столов. Что правильно?
company 1 - n person
person 1 - n advertising
(company 1 - n advertising)
Компания:
id | name
1 | xcompany
2 | ycompany
человек:
id | name | company_id
1 | xperson | 1
2 | yperson | 2
Реклама:
id | name | person_id
1 | xad | 1
2 | yad | 2
advertising->person()->company();
SELECT
*
FROM
advertising
LEFT JOIN
person ON advertising.person_id = person.id
LEFT JOIN
company ON person.company_id = company.id;
против рекламы:
id | name | person_id | company_id
1 | xad | 1 | 1
2 | yad | 2 | 2
$advertising->company();
SELECT
*
FROM
advertising
LEFT JOIN
company ON advertising.company_id = company.id;
Хотя я считаю этот вопрос вполне основанным на мнении, решение в рамках laravel довольно ясное: отношение HasManyThrough
денормализуйте только тогда, когда у вас крупномасштабное приложение и вам нужно повысить производительность, в противном случае продолжайте нормализацию и сэкономьте много времени.
Проверьте, подходит ли полиморфные отношения вашим потребностям.






Поскольку реклама в основном связана с человеком, я бы связал только отношения реклама -> человек. Однако это мое мнение о простом сценарии, и он упрощает жизнь.
Я полагаю, вы думаете о денормализации БД, которая является допустимой техникой, но ее следует применять только при необходимости: en.wikipedia.org/wiki/Denormalization