【发布时间】:2013-12-18 00:53:45
【问题描述】:
假设我有 3 个模型:
- 用户
- 页面
- 评论
我根据是否应该让每个模型跟踪其关系提出了一个问题:SQL relationships and best practices
这方面的一个例子是一个“页面”表,它说明了它的作者是谁......问题似乎是,如果 2 个用户是一个页面的作者,你必须添加一个新的特定表称为 PageRelationshipsWithUsers 可能具有对 PageID 和创建它的 UserID 的引用以及共同作者的单独行。
可以理解,这听起来有点不妥。我最终会得到一大堆关系表,而且很可能只用一个多用途关系表来代替它......所以我决定想出一个如下所示的关系表:
关系表新
RelationshipID | ItemID | LinkID | ItemType | LinkType | Status
-----------------------------------------------------------------------------
1 | 23(PageID) | 7(UserID) | ("Page") | ("User") | TRUE
2 | 22(CommentID) | 7(UserID) | ("Comment") | ("User") | TRUE
3 | 22(CommentID) | 23(PageID) | ("Comment") | ("Page") | TRUE
但是,我非常感谢一些关于像这样布置我的关系表的想法有多好的意见。
有什么想法吗?
一位同事告诉我的答案:
想象一下模型“Book”的上述关系表
一个用户可以租一本书,所以关系是用户 -> 书... 但是如果他也可以买一本书呢:User->Book....
糟糕,我们需要一个新的关系...考虑到这个关系表应该是一刀切,我们现在需要添加一个新的单独的表...哎呀。
所以答案是不不不。不要,很淘气。保持您的关系表独立且具体。
【问题讨论】:
-
如果您的任何“类型”重复,它们应该在自己的表中。
-
我不确定我是否理解你所说的。你的意思是如果有两种类型的页面。一个有标题,一个有 AwesomeTitle……这是一种罕见的情况……我错了吗?
-
如果你想去3NF,你在类型下的重复数据应该有自己的表,然后在你的“关系”表中引用。
-
我的表中没有重复数据。关系表有 3 个条目。 1)将页面与用户相关联(2)将评论与用户相关联(3)将评论与页面相关联。我在这里完全错过了一些东西,不是吗?大声笑
-
在过去几年不得不使用这样的架构,我可以强烈建议您不要这样做。将单独的关系保存在它们自己的适当表中,并让系统保持良好的引用完整性。