回答

收藏

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

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

我有一个(虚拟)表结构,如下所示:
$ j% K. T4 B( p" E, a6 C+ K票证  **ID** :int(11)PK  **名称** :varchar(255)  **状态** ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????问题是,我应该使用哪种数据类型作为状态?正如我所看到的,这是我的选择:) L: b  O0 f: I2 u# e
[ol]varchar代表状态-错误是因为没有完整性4 N& {* \8 E+ C9 U
枚举代表状态-BAD,因为要改变值,我必须改变表,然后添加任何值下拉列表的代码,等等
9 f/ D- i& ^" N1 I5 w6 yint FK到状态表-好的,因为是动态的,不好的,因为很难通过目视检查(这可能很有用)  h+ x# d+ Q  ~
varchar FK到状态表-好的,因为它是动态的,在检查中可见。坏的,因为密钥是有意义的,通常是不合理的owned。有趣的是,在这种情况下,状态表可能只有一列,这使它成为美化的枚举[/ol]我对情况有准确的了解吗?有意义的钥匙真的那么糟糕吗?因为虽然它确实给我带来了鸡皮b,但我没有任何理由这样做……* j9 s: w1 U4 F' \! |2 H
更新:    对于选项4,建议的结构将是 status表的状态    : char(4)FK    。所以,8 F1 x( U+ Q( B) V! H
OPEN =>“打开”
; n$ \, f6 {. X. j2 x% TCLOS =>“已关闭”
. K& p2 ^& d9 c; Z8 s/ B: ^; g0 ]“ PEND” =>待定授权9 j- c) L$ O9 ]$ Z* p
“ PROG” =>“进行中
0 R- \* P. S7 ?  Q在这种情况下有什么缺点?我可以看到在这种情况下使用它int而不是char唯一的优点是性能稍差。: k) Q5 J$ {/ {! G2 l5 Q/ ~
                                                               
1 a) c1 m& W; ^* p; ~+ s1 C    解决方案:                                                               
4 a% d3 k4 k1 y4 m/ V                                                                转到数字3。如果您想检查某些内容,请在状态值中创建连接视图。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则