sql - Char(4) 与 int 作为表中的 StatusID/StatusCode 列

标签 sql sql-server

我需要一个包含十几个可能值的状态列。 为什么我应该选择 int (StatusID) 而不是 char(4) (StatusCode)? 由于 sql server 不支持命名常量,因此当在存储过程和 View 中用作常量时,char 比 int 更具描述性。 为了澄清,我仍然会以任何一种方式使用查找表。因为我需要一个更具描述性的 UI 文本。因此,这个决定只是为了帮助我作为开发人员维护存储过程和 View 。

现在我倾向于 char(4)。特别是因为在 SQL Server Management Studio 中设计 View 会阻止我添加注释(我知道可以在脚本编辑器中添加它,但实际上我会更频繁地使用 View 设计器,尤其是在 View 很普通的情况下)。 StateCODE = 'NEW' 比 StateID = 1000 更具可读性。 我想问题是在某些情况下 char(4) 会不会有问题,并且由于数据库非常小,我不太担心轻微的性能影响(比如使用 TinyInt 与 int),但更担心代码维护问题.

最佳答案

数据库纯粹主义者会说键在业务领域中应该没有意义,并且您应该创建一个状态表,您可以在其中查找状态的描述和其他含义。

但对于运营商和最终用户而言,拥有描述性状态代码可能是一件幸事。而且它甚至不必是 char(4),您可以将它设为 varchar(20)。这允许他们在没有连接的情况下进行查询,并以更简单的方式检查数据库。

最后,我觉得char(20)组织会运行的比较顺利,周五早点回家。但是int组织对数据库有更好的抽象,他们可以在星期五晚上享受元编程(或在论坛上进行提升。)

(所有这些都假设您正在编写业务支持软件。SAP 是最成功的业务支持系统之一,它成功地使用了有意义的键。)

关于sql - Char(4) 与 int 作为表中的 StatusID/StatusCode 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/857530/

相关文章:

c# - C#如何获取数据表中某列的值?

sql - 将sql server数据库中的所有数据显示到一个表中

sql - 如何明智地按一组增加列

mysql - 合并重复的电子邮件和点 mysql

mysql - 自动填充时间维度表

sql - 无法将数据类型分配给列 "GeoLocation"

sql - SQL Server Management Studio 中的标准模板

sql - SQL:将整数转换为十六进制字符串?

MySQL:不同值的最大出现次数的计数

SQL Server 存储过程返回一个表