在SQL Server 2005中存储自定义值

时间:2011-01-11 00:41:10

标签: sql database sql-server-2005

如何存储自定义值来代替列的数据类型。 我有一个名为'Orders'的表,其中一个名为'OrderStatus'的列,其目的是存储订单的状态。例如,R =已拒绝,S =已发送,T =已返回。

我对数据库和设计都很陌生......

4 个答案:

答案 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的列中的该表相关联,该列将是一个不为空的外键。