回答

收藏

用于sql表中“ tatus”列的类型

技术问答 技术问答 424 人阅读 | 0 人回复 | 2023-09-14

我有一个(虚拟)表结构,如下所示:5 P  m% q" C" [
票证  **ID** :int(11)PK  **名称** :varchar(255)  **状态** ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????问题是,我应该使用哪种数据类型作为状态?正如我所看到的,这是我的选择:
/ U9 C* X, P6 Q: J2 y6 V4 l[ol]varchar代表状态-错误是因为没有完整性
6 `6 E9 B, V  {+ x枚举代表状态-BAD,因为要改变值,我必须改变表,然后添加任何值下拉列表的代码,等等
* S$ v1 B% r+ z" B4 u* nint FK到状态表-好的,因为是动态的,不好的,因为很难通过目视检查(这可能很有用)7 h6 Y2 W8 W# c" f" t7 O
varchar FK到状态表-好的,因为它是动态的,在检查中可见。坏的,因为密钥是有意义的,通常是不合理的owned。有趣的是,在这种情况下,状态表可能只有一列,这使它成为美化的枚举[/ol]我对情况有准确的了解吗?有意义的钥匙真的那么糟糕吗?因为虽然它确实给我带来了鸡皮b,但我没有任何理由这样做……! l3 p. ~0 l( S
更新:    对于选项4,建议的结构将是 status表的状态    : char(4)FK    。所以,
& j4 B8 J: b+ d+ p* |) {( Q' rOPEN =>“打开”2 L' z$ ?, m9 [, f  C( M
CLOS =>“已关闭”
' n9 ^* m% k9 N/ U! I8 n3 |8 \“ PEND” =>待定授权
* @3 D/ X" f6 @$ l! F8 K8 S! y“ PROG” =>“进行中# h% N9 e! ~5 v) k1 B# J! s) e
在这种情况下有什么缺点?我可以看到在这种情况下使用它int而不是char唯一的优点是性能稍差。  E& r4 ~3 n. d+ H: G
                                                               
3 y/ Z" Z* ~( ~    解决方案:                                                               
  W. W: T5 {2 x, \7 x                                                                转到数字3。如果您想检查某些内容,请在状态值中创建连接视图。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则