2009-09-16 21 views

答えて

110

これはありません。パフォーマンスの問題は、まだハードの値を使用し

mycol VARCHAR(10) NOT NULL CHECK (mycol IN('Useful', 'Useless', 'Unknown')) 
+1

SSMSでの操作方法は? – EgoPingvina

+0

@ EgoPingvina:これは質問ではなく、コメントでお願いします。 – chaos

2
CREATE FUNCTION ActionState_Preassigned() 
RETURNS tinyint 
AS 
BEGIN 
    RETURN 0 
END 

GO 

CREATE FUNCTION ActionState_Unassigned() 
RETURNS tinyint 
AS 
BEGIN 
    RETURN 1 
END 

-- etc... 

:漠然とした同等のがあります。

68

私が見つけた最良の解決策は、可能な値を主キーとして参照テーブルを作成し、ルックアップテーブルの外部キーを作成することです。

+7

上記のチェック制約よりも保守性の観点から優れたソリューションです。 – HLGEM

+14

これはEnumsより優れたソリューションです - MySQLでも同様です。 –

+2

@ypercubeなぜMySQLの方がいいですか? – BenR

1

SQL Serverで列挙型を実装するときに、この興味深いアプローチが見つかりました。

2つのセントラルテーブルですべてのデータベースの列挙型のニーズを満たすことができると考えられるため、以下のリンクのアプローチは非常に魅力的です。

http://blog.sqlauthority.com/2010/03/22/sql-server-enumerations-in-relational-database-best-practice/

+6

これは「1つの真実」として知られる反パターンの変形です(ルックアップテーブル"。適切な方法は、各列挙型ごとに別のテーブルを用意し、外部キーを使用することです(ルックアップが必要な場合は「純粋な」列挙型ではない可能性があります)。 –

+2

リンクされたページのコメントは、この回答が指定するものではなく、それぞれの "enum"ごとに個別のテーブルを使用するための良いバックアップを提供します –

+4

ほとんどの人がこのデザインを正当に評価する方法はかなり面白いですが、 。 –

関連する問題