Laravel数据结构

时间:2015-10-30 13:09:07

标签: database laravel database-design polymorphism relational-database

想知道我是否能在以下情况下获得您的想法/经验?如果我能澄清下面的任何信息,请告诉我。

问题

我需要与用户和公司进行交互,检索,过滤/排序和分页到集成的html表中。

关系结构: user hasMany() companycompany belongsTo() user

澄清:只有user才能登录。company无法登录。

潜在解决方案(我可以看到)

多态性

使用networkable模型/表,通过名为" displayable()"的users关系将companiesmorphTo()表关联起来。合并表的检索将通过Networkable::with('displayable')->get()完成。

加号

1)数据库保持userscompanies的清晰分离。

权衡

1)每次创建/删除usercompany时都需要维护关系

2)使典型的雄辩函数变得复杂,因为usercompany细节将通过关系或远距离关系来检索

单桌

companies存储在users表中,并将它们视为不同的实体,即使它们存储在同一个表中。

加号

1)过滤将非常自然,并且可能更快,因为我们将处理单个表,并且最小化复杂的连接。

权衡

1)通过在users表格中添加额外的列来打破Second Normal Form,仅可用于"公司"用户类型。

2)并非users表中的所有记录都是用户。混乱?是。 users表中的某些记录为companies,其列信息与users不同。 companies可能会有一个名为is_company的布尔值或类似内容,以区分company记录和user记录。

3)需要将user加入users表本身的关系。这样一来,用户就可以拥有" company

4)需要限制以company登录,因为这不是company的意图。

你怎么看?这些选项中的一个比另一个更好吗?我错过了另一种解决方案吗谢谢!

Desired output

1 个答案:

答案 0 :(得分:0)

就像在https://larachat.slack.com中所说的那样。使用SQL UNION和/或SQL VIEW将它们组合在一起并拥有一个可查询的视图。

http://www.w3schools.com/sql/sql_union.asp 和/或 http://www.w3schools.com/sql/sql_view.asp

主要信用归Joseph Silber所有。

$networkable = DB::table('users')->union(DB::table('companies'))->paginate(10);