我在做一个数据库,里面有公司问卷的答案。
在包含大部分答案的表中,我有一个列(即techDir)指示是否有技术主管。如果公司有一个控制器,那么它将填充一个引用“people”表的ID,否则它将保留“null”。
想到的另一个设计是“techDir”列,其中包含一个布尔值,将“people”表中的查找保留到软件逻辑中,并在“people”表中添加一个列,指示人员的角色。
这两种设计哪一种更好?总的来说有没有更好的设计是我没有想到的?

最佳答案

我想说,如果有相对少量的空值,那么使用空值就可以了。但是,如果发现大多数行包含空值,那么最好删除techDir列,并将引用“Answers”的列与引用“People”表的另一个字段放在新表中。换句话说,在Answers表和People表之间创建一个中间表,其中包含所有技术主管,如下所示。
这将消除所有的空值,也允许更多的灵活性。如果每个答案只有一个技术主管,那么只需使引用应答表的列“唯一”即可创建一对一关系。如果需要多个技术主管,请创建一对多关系,如图所示。这种设计的另一个优点是,如果您想提取所有技术控制器,它可以简化查询。在决定是否使用空值时,我通常使用一个简单的经验法则。如果看到表包含大量空值,则删除这些列并创建一个新表,以便在其中存储数据。当然,您还应该考虑要执行的查询类型。例如,上面的设计可能需要一个内部或外部连接来查看包括技术控制器在内的所有行。作为开发人员,在做出这些决定时,你应该仔细掂量正反两方面的东西,比如灵活性、速度、复杂性和业务规则。

关于mysql - 外键列可以选择包含NULL或ID。有更好的设计吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5288608/

10-16 13:16