我该怎么做“婚姻状况”字段的类型?

时间:2014-01-18 22:23:27

标签: sql sql-server sql-server-2008-r2

我的表格中有一个字段“婚姻状况”,用户必须选择(radiobutton),如果他(已婚,离婚,单身,voeuf)

我该怎么做这个字段的类型?

是否有布尔类型?

3 个答案:

答案 0 :(得分:1)

无论如何,

marital status听起来不像布尔值。这听起来像一个枚举。布尔值将是married(Y / N),虽然我认为在这个时代你可能希望能够在那里存储多种关系,并且你自己指定你需要存储'devorced'同样,布尔值是不可能的。

所以我建议制作一个名为MaritalStatus的表,它有一个ID和一个描述。将各种状态存储在那里,并在表格中为MaritalStatusID创建一个外键。

答案 1 :(得分:1)

将其设为INT字段,在数据库中创建另一个类似

的表
CREATE TABLE dbo.MaritalStatus
(
M_ID INT PRIMARY KEY NOT NULL,
M_Status NVARCHAR(20)
)
GO

INSERT INTO  dbo.MaritalStatus
VALUES
(1, 'Single'),(2,'Married'),(3,'Divorced'),
(4,'Widowed'),(5,'Other'),(6,'Prefer Not to say').... bla bla

现在在"Marital Status" field的表格中,使用来自dbo.MaritalStatus"M_ID"的INT值来引用用户婚姻状况。

布尔或SQL位数据类型最适用于某种情况可能为TRUE或NOT TRUE的情况,对于某人的婚姻状况,可能有两个以上的可能值,因此您应为所有可能的婚姻状况创建一个单独的表并使用外键约束。

答案 2 :(得分:0)

T-SQL的布尔等价物是bit

尽管如此,您似乎想要的不仅仅是答案。在这种情况下,使用int然后将int转换为枚举。

修改:Dukeling在编辑中删除了C#标记,因此我不确定该部分的相关性如何 /编辑

枚举:

enum MaritalStatus
{
   Single,
   Married,
   Divorced,
   ...
}

来自DB的int:

int maritalStatusFromDB = //value from DB

将int转换为枚举:

MaritalStatus maritalStatus = (MaritalStatus)maritalStatusFromDB;

请注意,您的数据库可能包含未在枚举中定义的int值,例如10.您可以检查maritalStatusFromDB是否为有效的MaritalStatus,如下所示:

bool isValid = Enum.IsDefined(typeof(MaritalStatus), maritalStatusFromDB);
if( isValid == false )
{
    //handle appropriately
}