想知道我是否可以对以下情况有您的看法/经验?请让我知道是否可以澄清以下任何信息。
我需要与“用户和公司”进行交互,检索,过滤/排序以及将其分页到一个集成的html表中。
关系结构: user
hasMany()
company
和company
belongsTo()
user
。
说明:只有auser
可以登录。Acompany
不能登录。
使用networkable
模型/表,通过称为“ displayable()”的关系来关联users
和companies
表morphTo()
。合并表的检索将通过进行Networkable::with('displayable')->get()
。
加号
1)数据库保持的完全分离users
和companies
。
权衡取舍
1)每次创建或删除user
或时company
都需要维护关系
2)因为复杂典型口才功能user
和company
细节将通过关系或疏远关系被检索
将它们存储companies
在users
表中,并将它们视为不同的实体,即使它们存储在同一表中也是如此。
加号
1)过滤是很自然的,并且可能更快,因为我们将处理单个表和最少的复杂联接。
权衡取舍
1)通过在表中添加额外的列来打破第二范式,该列users
仅可用于“公司”类型的用户。
2)并非users
表中的所有记录实际上都是用户。令人困惑?是的。该users
表中的某些记录将是companies
,这些记录的列信息将不同于users
。companies
可能会使用布尔调用is_company
或类似名称来区分一条company
记录和一条user
记录。
3)将需要一个将a联接user
到users
表本身的关系。这样,用户可以“拥有”一个company
。
4)company
由于不是a的意图,因此需要限制登录为a company
。
你怎么看?这些选择之一比另一个更好吗?我是否缺少其他解决方案?谢谢!
就像在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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句