【发布时间】:2011-11-04 13:05:02
【问题描述】:
我有一个(虚拟)表结构如下:
票 id: int(11) PK 名称:varchar(255) 状态:?????????问题是,我应该为状态使用什么数据类型?在我看来,这是我的选择:
- varchar 表示状态 - 不好,因为没有完整性
- 表示状态的枚举 - 不好,因为要更改值,我必须更改表,然后更改任何带有值下拉列表的代码等
- 对状态表进行 int FK - 好是因为它是动态的,坏是因为它更难通过肉眼检查(这可能很有用)
- varchar FK 到状态表 - 好,因为它是动态的,并且在检查时可见。不好,因为键是有意义的,这通常是不受欢迎的。有趣的是,在这种情况下,状态表完全有可能只有 1 列,使其成为一个美化的枚举
我对情况有准确的了解吗?拥有一个有意义的密钥真的那么糟糕吗?因为虽然它确实让我起鸡皮疙瘩,但我没有任何理由这样做......
更新: 对于选项 4,建议的结构将是 status: char(4) FK,用于状态表。所以,
打开 => "打开"
CLOS => "关闭"
"PEND" => "待授权"
"PROG" => "进行中
在这种情况下有什么缺点?在这种情况下,我可以看到使用 int 而不是 char 的唯一好处是性能稍差。
【问题讨论】:
-
离题,应该转移到 DBA SE
标签: sql database join database-design key