たとえば、MS SQL Server 2008のvarchar列に4つの異なる値を指定する方法はありますか?
たとえば、可能な値として「Daily」、「Weekly」、「Monthly」、「Yearly」のみを受け入れるFrequency(varchar)という列が必要です。
これは、テーブルを作成するときにSQL Server Management Studio内で設定できますか?
値を制限するcheck constraint
をその列に追加することを既に検討しましたか?何かのようなもの:
CREATE TABLE SomeTable
(
Id int NOT NULL,
Frequency varchar(200),
CONSTRAINT chk_Frequency CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
)
チェック制約 が必要です。
CHECK制約は、別の列のデータに基づいていない論理式から有効な値を決定します。たとえば、15,000ドルから100,000ドルの範囲のデータのみを許可するCHECK制約を作成することにより、給与列の値の範囲を制限できます。これにより、通常の給与範囲を超えて給与が入力されるのを防ぎます。
次のようなものが必要です:
ALTER TABLE dbo.Table ADD CONSTRAINT CK_Table_Frequency
CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
上記のリンクで説明されているように、スカラー関数を使用してチェック制約を実装することもできます。
個人的には、tinyintおよび次のようにコーディングします。
理由:
テキストを保存するのに平均8バイト、tinyintに1バイトかかります。数百万行を超えると、違いが生じます。
照合はどうですか? 「Daily」は「DAILY」と同じですか?この種の比較を行うにはリソースが必要です。
最後に、「隔週」または「毎時」を追加する場合はどうなりますか?ルックアップテーブルに新しい行を追加するだけの場合は、スキーマを変更する必要があります。
テーブルを編集しているとき
右クリック->制約のチェック->追加->式フィールドにFrequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly')
のようなものを入力し、(名前)フィールドに適切な制約名を入力します。
これで完了です。