我必须创建一个数据库结构。我有一个关于外键和良好实践的问题:
我有一个表,该表必须有一个字段,该字段可以是两个不同的字符串值,“A”或“B”。 它不能是其他任何东西(因此,我不能使用字符串类型字段)。
设计这张表的最佳方式是什么:
1) 创建一个 int 字段,它是另一个表的外键,只有两条记录,一条用于字符串“A”,一条用于字符串“B”
2) 创建一个 int 字段,然后在我的应用程序中创建一个这样的枚举
public enum StringAllowedValues
{
A = 1,
B
}
3) ???
预先感谢您的宝贵时间。
编辑:13 分钟后,我收到了所有这些很棒的反馈。感谢大家的想法和见解。
最佳答案
许多数据库引擎支持枚举作为一种数据类型。事实上,在某些情况下枚举是正确的设计解决方案。
然而...
有两个要求可以决定单独表的外键更好。
第一个是:可能需要增加该列中有效选项的数量。在大多数情况下,您希望在没有软件部署的情况下执行此操作;枚举是“内置”的,因此在这种情况下,可以向其中写入新数据的表效率更高。
第二个是:应用程序需要推理此列中的值,其方式可能超出“A”或“B”。例如,“A”可能比“B”更大/更旧/更贵,或者您想要向最终用户展示 A 的某些其他属性,或者 A 是某些内容的简写。
在这种情况下,最好将其显式建模为表中的列,而不是将这些知识融入您的查询中。
在 30 年的数据库工作中,我个人从未发现枚举是正确决定的案例....
关于c# - SQL 良好实践和外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40468767/