|
3
|
| Thea Ray Suelzer · 技术社区 · 15 年前 |
|
1
5
代码中的枚举很酷也很方便,但是在更改枚举时可能会破坏数据库的完整性。 所以一般来说:当需要关系完整性时,在数据库中使用枚举。我们在代码中使用显式映射枚举来处理此问题;并在数据库中强制实现完整性。比如:
何时仅在代码中使用枚举?
|
|
|
2
1
对于这个特定的例子,性别总是男性或女性,所以让数据库携带静态细节并不是非常有益。 但也有一些枚举更具动态性,比如有枚举Visa和Mastercard的商店。可能稍后他们将不得不添加Discover和Amex,在这一点上,数据库枚举更有用,因为您也可以在代码中动态处理它。 |
|
|
3
1
第三个选项(存储字符串值)最糟糕:然后需要在字符串和枚举之间进行转换。将枚举存储为int更好,因为枚举基本上是int本身,所以来回转换很便宜。 是否将查找存储在数据库中取决于要在数据库中执行的操作:对该表具有外键引用将确保只存储正确的值。但您也可以决定您的程序将始终存储正确的值,因为该值来自您的枚举。 |
|
4
1
我会两者都用。您应该以任何方式对数据库设置约束,以便不能输入任何无效值。如果不这样做,则可以从程序或其他可能使用同一数据库的(将来的)程序中插入无效值。 您确实可以使用包含所有性别的表,因为这将允许外键约束,从而强制执行正确的数据。此外,还可以使用额外的值轻松扩展表,尽管在性别方面这可能没有那么有用。 但我也可以理解,如果有人想把它变成一个字符(1)字段,它可以包含M,F,或者其他一些值,表示未知,无,两者(取决于数据库中存储的物种)。 但在这之后,在代码中创建枚举可能仍然很方便,您可以使用它轻松地转换这些数据库值。如果您实际上是指“female”,则不希望在expression中使用值“2”,因此您将希望使用枚举或至少一些常量,这些常量直接或间接映射到数据库中的实际值,因为抽象是数据库开发的关键。 |
|
|
5
1
两者都应该使用,但它们应该存储在数据库中。如果您使用的是Visual Studio,则可以创建自定义T4(文本模板转换工具包)模板(a.tt文件)。这将允许您直接从数据库中存储的内容创建类/枚举。您将获得右键单击该tt文件、选择“运行自定义工具”并从数据库中存储的内容更新c文件的能力。 |
|
|
6
0
如果其他应用程序、报表系统等可能需要这些数据,请将这些数据存储在数据库中。 |
|
|
7
0
如果正确使用约束,数据库枚举无疑更有用。
一个 外键约束 将确保在数据库中插入或更新时数据有效。硬编码枚举将强制您稍后重新编译代码。最好读取外键的值并提供动态查找。 |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |