如何存储自定义值来代替列的数据类型。 我有一个名为'Orders'的表,其中一个名为'OrderStatus'的列,其目的是存储订单的状态。例如,R =已拒绝,S =已发送,T =已返回。
我对数据库和设计都很陌生......
答案 0 :(得分:2)
“正确”的答案是使用标准SQL-92的CREATE DOMAIN
。可悲的是,SQL Server尚不支持它。如果您希望获得支持,可以投票支持here。
SQL Server有自己的CREATE TYPE
语法,但是当我上次查看时,我宣称它们不适合用途。如果有人不同意,请将答案发给my question:)
这留下了两个可行的选择:具有外键或CHECK
约束的表。经验法则是,如果域值集很小且稳定(例如ISO 5218 sex codes),则使用CHECK
约束,否则更喜欢具有外键的表。
答案 1 :(得分:1)
在这种情况下,你并不真的需要自定义数据类型,你只需要一个外键的表与所有的状态中了。
您的OrderStatus
表格如下:
id int PK NOT NULL, IDENTITY
code char(1) NOT NULL
description varchar(100) NOT NULL
(编辑:注意,如Martin在另一个答案评论指出,替代id
键不是完全必要的,但它允许灵活性用于容易地改变code
,而不必更新引用它的数据)
您的Order
表将拥有此表的外键:
order_status_id int FK NOT NULL
答案 2 :(得分:1)
你可以做到这一点。
OrderStatus OrderStatusCode
----------- ---------------
Rejected R
Sent S
Returned T
之后,如果你有更多的“设计”,你可以使用查找表。
答案 3 :(得分:0)
最佳做法是规范化,这意味着创建一个名为ORDER_STATUS的表,其中包含批准的值,最低限度使用如下模式:
ORDER_STATUS(id number auto increment, code character, meaning varchar)
然后将ORDERS与名为order_status_id的列中的该表相关联,该列将是一个不为空的外键。