【发布时间】:2008-10-01 22:28:49
【问题描述】:
我正在开发一个需要代表计算机及其用户的数据库。每台计算机可以有多个用户,每个用户可以与多台计算机相关联,所以这是一个经典的多对多关系。但是,还需要有“主要”用户的概念。我必须能够加入反对主要用户以列出所有计算机及其主要用户。我不确定在数据库中构建它的最佳方式是什么:
1) 正如我目前所做的那样:将表与布尔 IsPrimary 列链接起来。加入需要类似 ON (c.computer_id = l.computer_id AND l.is_primary = 1)。它有效,但感觉不对,因为将数据限制为每台计算机只有一个主要用户并不容易。
2) 计算机表上直接指向用户行的字段,用户表中的所有行都代表非主用户。这更好地表示了每台计算机一个主的约束,但使获取计算机用户列表变得更加困难。
3) 计算机表上的字段链接到链接表中的一行。感觉怪怪的……
4) 别的?
描述这种关系的“关系”方式是什么?
编辑: @Mark Brackett:第三个选项对我来说似乎不那么奇怪了,因为您已经展示了它的外观。出于某种原因,我什至没有想过使用复合外键,所以我想我必须在链接表上添加一个标识列才能使其工作。看起来很棒,谢谢!
@j04t:很酷,我很高兴我们现在就 #3 达成一致。
【问题讨论】:
-
为什么很难在第 2 点列出计算机用户?
-
因为链接表不包含给定计算机的所有用户。
标签: sql-server database-design