【发布时间】:2018-03-31 13:33:04
【问题描述】:
是否应该定义所有关系?在这种情况下,是否也应该定义“公司-广告”关系?我的意思是优点是您不需要加入许多表。什么是对的?
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;
vs 广告:
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;
【问题讨论】:
-
我相信您正在考虑 DB 非规范化,这是一种有效的技术,但仅应在需要时应用:en.wikipedia.org/wiki/Denormalization
-
虽然我认为这个问题非常基于意见,但 laravel 中的解决方案非常明确:HasManyThroughrelation
-
只有当你有大规模应用程序并且需要提高性能时才去规范化,否则,保持规范化并节省你很多时间。
-
检查polymorphic relations是否适合您的需求。
标签: mysql laravel symfony orm relational-database