我有一个实体,它有4种不同类型的属性,每种情况只能有一个值,分别是布尔值,十进制,字符串或文本。我不想用4个boolean,decimal,nvarchar和ntext列定义表。你会建议怎么报道这个案子?
更新
我正在使用MS SQL Server。
这是类定义:
public class Foo
{
public int Id { get; set; }
public string Description { get; set; }
public bool BooleanValue { get; set; }
public decimal DecimalValue { get; set; }
public string NVarcharValue { get; set; }
public string NTextValue { get; set; }
}
答案 0 :(得分:1)
我假设您要使用MS SQL Server。
如果是这种情况,那么我就不会使用ntext
此数据类型将在SQL Server的未来版本中删除。如果确实需要使用非Unicode数据类型,请使用nvarchar
。使用ntext
的另一个限制是您无法将其转换为许多其他数据类型。在30种奇数数据类型中,您只能将ntext
转换为其中的六种。
在这种情况下你可以做的是具有以下表格结构。
Create Table dbo.PropertyInformation
(
PropertyId int identity(1,1) not null,
PropertyName varchar(50) not null,
PropertyTypeId int not null,
PropertyValue nvarchar(max)
)
然后添加查找表以存储您的属性类型
Create table dbo.PropertyTypes
(
PropertyTypeId int identity(1,1) not null,
PropertyType varchar(50) not null
)
您可以在PropertyValue列中存储任何类型的值,因为nvarchar
转换为几乎所有其他数据类型 - 除了图像。从查找表中读取PropertyType,并在App中动态转换PropertyValue的值。
虽然,您是否有理由不想使用4个不同的列来存储属性值?
Casting & Converting in SQL Server(允许转化的矩阵大约是页面的一半)
答案 1 :(得分:0)
您可以为每个属性定义4个表,每个表的每一行都有一个到它所属实体的外键。