我的MS SQL数据库中有一个标签表,我在其中指定了一个" TagType"作为smallint的列,它可以具有值0,1,2,3并且它们都具有不同的含义,并且显然只有一个,因为只有一列。现在我要求东西应该能够同时拥有两个TagType。
因此,例如,一个项目应该能够同时拥有2和3。因为我只有一个专栏,所以当然不可能。对我来说,引入新型喜欢" 4"并不难。并且这意味着2或3.但我真的不想重写我的所有查询,这些查询依赖于检查某些东西是2还是3我只是希望它们匹配。
我想要的是能够做一个查询" WHERE TagType = 3"如果列中的值是例如" 4"或" 23"它会匹配,我不确定如何,但也许有一些智能功能可以做到这一点?
答案 0 :(得分:0)
SQL中相同类型的多个值的自然表示是继续使用一列但使用多行。如果您要更改列的多重性,您会经常发现需要创建一个新表,然后允许您将多对一关系返回到原始表。
这将需要架构更改和现有代码的一些更新,但其他任何东西都是软糖。
所以,我们来自:
CREATE TABLE T1 (
ID int not null primary key,
Col1 varchar(19) not null,
TagType smallint
)
为:
CREATE TABLE T1 (
ID int not null primary key,
Col1 varchar(19) not null
)
CREATE TABLE T1Tags (
T1ID int not null,
TagType smallint not null,
constraint PK_T1Tags PRIMARY KEY (T1ID,TagType),
constraint FK_T1Tags_T1 FOREIGN KEY (T1ID)
references T1(ID)
)