【发布时间】:2010-10-06 22:31:26
【问题描述】:
与我关于整数而不是小数的问题有点相关;我的供应商以 char(1) 格式(即 Y/N)提供了很多“布尔”字段。其中一些字段合法地不能是布尔值,因为它们可以有多个值,但大多数可以被视为布尔值。在我之前的问题中,建议是做“正确”的事情,而不是供应商提供的事情;我应该仍然应用此逻辑并使用这些列的位字段创建我的数据库架构,还是将其保留为 char(1) 并在我的代码中进行转换?
同样关于这个主题,就代码而言,我应该如何处理三态字段?从逻辑上讲,该字段是一个布尔值(从某种意义上说,我只对 Y/N 值感兴趣,而第三个值实际上是是或否),但这些值可以不仅仅是真/假(例如,有一个UpsShippable 字段可以是Y、N 或G);该字段有多个状态,那么我将如何最好地封装它?像枚举(或静态常量,因为枚举不能与 char 数据类型一起使用)之类的东西?在多值情况下,数据更像是一个类型指示符而不是一个标志。
总结一下(我有点啰嗦):1)在处理数据中的char(1) 值时,您会将它们保留为字符还是转换为位(或任何您的数据库的布尔类型)以及为什么,和 2) 假设您在数据模式中将其保留为 char(1),您将如何处理代码中的三态 char 字段?
编辑:为了澄清,这些字段都没有用于“真实”逻辑,它基本上只是一个指标。例如,如果该物品不能通过 UPS 运送(即价值为 N/G),那么在面向客户的页面上,它会说该物品不能通过 UPS 运送,并且在后端逻辑不会调用 UPS 的网络服务来计算运费。其他 Y/N 字段只是作为有关项目的额外详细信息存在并且没有逻辑,尽管它们需要是可更改的(例如,有一个复选框来指示它是否在后端的数据输入表单上被回收);我可能会显示图像或按它们过滤项目(例如,您可以搜索所有回收产品,我会检查以确保它们的回收指示符是真实的)但没有别的,至少目前不是。
【问题讨论】:
标签: sql sql-server database-design types