回答

收藏

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

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

我有一个(虚拟)表结构,如下所示:
2 N& U. m  ^# R$ y票证  **ID** :int(11)PK  **名称** :varchar(255)  **状态** ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????问题是,我应该使用哪种数据类型作为状态?正如我所看到的,这是我的选择:
7 o' e6 t+ f, r! H1 ^: D% `[ol]varchar代表状态-错误是因为没有完整性
4 L; k- Q* t" x5 g. ^枚举代表状态-BAD,因为要改变值,我必须改变表,然后添加任何值下拉列表的代码,等等& W( O4 N* u; j) K6 r
int FK到状态表-好的,因为是动态的,不好的,因为很难通过目视检查(这可能很有用)# H3 h+ _  a8 I  P# \; s+ g" `- v! h
varchar FK到状态表-好的,因为它是动态的,在检查中可见。坏的,因为密钥是有意义的,通常是不合理的owned。有趣的是,在这种情况下,状态表可能只有一列,这使它成为美化的枚举[/ol]我对情况有准确的了解吗?有意义的钥匙真的那么糟糕吗?因为虽然它确实给我带来了鸡皮b,但我没有任何理由这样做……
  G* b! u; g% T5 m: H" s! R更新:    对于选项4,建议的结构将是 status表的状态    : char(4)FK    。所以,
; J' ], O& _7 o( e4 c! [3 j' j) UOPEN =>“打开”, B# }3 [7 D& w5 X: J( r
CLOS =>“已关闭”
$ L. \' Z: q8 w+ j7 N* x) g$ Q“ PEND” =>待定授权
0 p4 r( c: G2 z. w6 Z“ PROG” =>“进行中! `* e% E4 L( G" U  o, a
在这种情况下有什么缺点?我可以看到在这种情况下使用它int而不是char唯一的优点是性能稍差。9 `$ d5 V) e, v8 O8 m" y
                                                               
9 f0 \: p- t0 H! M- o    解决方案:                                                                7 t' C/ C" Y8 X7 \# I# V
                                                                转到数字3。如果您想检查某些内容,请在状态值中创建连接视图。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则