2017-04-26 5 views
0

私は私のMS SQLデータベースにタグテーブルを持っています。私はsmallintである "TagType"カラムを指定しています。異なる意味を持ち、列が1つしかないので、明らかに1つだけであることがあります。今私は、物事は2つのTagTypesを一度に持つことができるはずですという要件があります。2つの異なる数字でintの列を一致させる

たとえば、アイテムは2と3の両方を同時に持つことができます。私は1つの列しか持たないので、もちろん不可能です。新しいタイプの「4」を導入して、それを2または3とするのは難しいことではありませんが、2または3の場合にチェックに依存するすべてのクエリを書き直したくないのです。 。

「WHERE TagType = 3」というクエリがあり、列の値がたとえば「4」または「23」の場合は、どのように、しかし、おそらく、これを行うことができるどこかのスマートな機能がありますか?

+0

一つの方法は、varchar型に、あなたの整数列をキャストして – DevelopmentIsMyPassion

+0

が明確なサンプルデータと所望の出力を示して比較することになります。 –

答えて

0

SQLで同じ型の複数の値を自然に表現すると、1つの列を使用し続けますが、複数行を使用します。列の多重度を変更する場合は、元の表に多対1の関係を戻すことができる新しい表を作成する必要があることがよくあります。

これにはスキーマの変更や既存のコードの更新が必要ですが、それ以外のものはファッジになります。

だから、私達はから行く:に

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) 
) 
関連する問題