1
7
选项3虽然感觉很奇怪,但它最接近你想要的模型。你会做如下的事情:
它为您提供0或1个主要用户(如果需要,primaryuserid可以为空),必须在computer_user中。编辑:如果一个用户只能是一台计算机的主用户,那么对computer.primaryuserid的唯一约束将强制执行该操作。请注意,没有要求所有用户都是某台计算机上的主要用户(这将是一种1:1关系,并要求他们位于同一个表中)。 编辑:一些查询向您展示此设计的简单性
|
2
1
编辑—— 我前三次都没好好考虑过… 我投票赞成—— (3号解决方案) 用户
计算机
计算机用户
这是我能想到的最好的解决办法。 为什么我喜欢这个设计。 1)由于这是一种涉及计算机和用户的关系,我喜欢将一个用户与多台计算机关联为主要用户的想法。但是,在使用此数据库的情况下,可能永远不会发生这种情况。 2)我不喜欢将主要用户放在链接表上的原因
是为了防止计算机有多个主要用户。 考虑到这些原因,第3个解决方案看起来更好,因为您永远不会遇到其他方法可能出现的问题。 解决方案1问题-每台计算机可能有多个主要用户。 解决方案2问题-当计算机和用户之间没有链接时,计算机将链接到主要用户。
解决方案3问题-看起来有点奇怪,不是吗?除此之外,我什么都想不起来。 解决方案4问题-我想不出任何其他方法。 这是第四次编辑,所以我希望它仍然有意义。 |
3
0
因为主用户是计算机和用户的函数,所以我倾向于采用您的方法,让主用户成为链接表上的一列。 我能想到的另一种选择是将primaryuser列直接放在计算机表本身上。 |
4
0
我会让另一个表的主要用户
|
5
0
解决方案1或2都有效。在这一点上,我会问自己哪一个更容易工作。我在不同的情况下使用了这两种方法,尽管我通常会在链接表上使用一个标志,然后强制对computer-id和isprimaryuser施加唯一的约束,这样可以确保每台计算机只有一个主用户。 |
6
0
2对我来说是正确的,但是我会测试1、2和3在您通常执行的查询种类和您拥有的数据量种类上的性能。 作为一般经验法则,我倾向于认为,在有实现选择的地方,您应该查看查询需求并设计模式,以便在最常见的情况下获得最佳的性能和资源利用率。 在极少数情况下,您会遇到同样常见的情况,建议使用相反的实现,然后使用Occam的Razor。 |
7
0
在我所处理的应用程序中,我们有一个类似的情况,我们的帐户可以连接多个客户,但只有一个客户应该是主要客户。 我们使用一个链接表(如您所用),但在链接表上有一个序列值。主要用户是sequence=1的用户。然后, 我们在该链接表上有一个accountid和sequence的索引,以确保accountid的组合 并且序列是唯一的(从而确保一个帐户上没有两个客户是第一个客户)。所以你应该:
|
Duvan · 将逗号(,)替换为点(.)[副本] 2 年前 |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
SoT · SQL Server中求和函数的工作方式 2 年前 |
NKAT · 将列值聚合到列表中会产生错误 2 年前 |
deanpillow · 返回两列中有一个匹配值的记录 2 年前 |
snowflakes74 · 在Dapper中异步查询多个结果 2 年前 |