2016-10-05 3 views
1

私はMySQLのバックグラウンドからSQL Serverを初めて使用しています。私は、次のように定義されたいくつかのフィールドを含むMySQLテーブルを移行しようとしています。SQL Server - 単純な多肢選択フィールドの定義

"FavoriteColors" SET('Red','Blue','Dark Purple', 'Green') DEFAULT NULL, 

基本的には複数の選択問題です。これらのフィールドをフォームに入力すると、ユーザーは1つまたは複数のフィールドを選択できます。

この定義に相当するSQL Serverを探しているとき、私は、多くの人がさまざまな選択肢のための余分なテーブルを作成し、前の2つを接続するためのルックアップテーブルを作成することが分かりました。このような複数の選択肢のフィールドがあることを知って、それはそのような単純な定義のためのかなり複雑な解決策のようです。これは本当にベストプラクティスですか、それとも代替ソリューションをお勧めしますか?もちろん、私は各選択肢にBITフィールドを使用できますが、SQL Serverにはおそらくこれのためのよりシンプルで組織化されたソリューションが用意されているようです。

ありがとうございます!

+2

オプションを保持するために別のテーブルを作成することで実行してください、ここで

がコードでデータベース内のどこでも、この新しいデータ型を使用できます外部キー)は、標準的なデータベースの習慣であるデータベースを正規化しています。上記のMySQL構文はSQLのCHECK CONSTRAINTと似ていますが、チェック制約はユーザーインターフェイスに値を課すものではなく、無効な値が入力された場合にデータベースエラーをスローします。 MySQL SETドコから、可能なSET値を取得するためにシステムカタログのハックを行うことができます。これはあなたがやっていることですか?あなたはおそらくSQL Serverで同様のことを行うことができますが、別のテーブルに正規化することをお勧めします –

+0

すばらしく、両方にとても感謝します! – Irina

答えて

0

ユーザー定義型を作成し、このデータ型のルールを作成できます。これは、あなたと(ステップは、ステップ

CREATE TYPE [dbo].[Color] FROM [nvarchar](40) NULL 

CREATE RULE ruleColor 
AS 
(@phone='Red') OR 
(@phone='Black') 
GO 

EXEC sp_bindrule 'ruleColor', 'Color' 
私はそれが役に立てば幸い

+1

注:この機能は、将来のバージョンのMicrosoft SQL Serverでは削除されます。新しい開発作業でこの機能を使用しないでください。現在、この機能を使用しているアプリケーションを変更する予定です。代わりにチェック制約を使用することをお勧めします。 [MSDN](https://msdn.microsoft.com/en-us/library/ms188064.aspx) – gofr1

+0

ありがとう、私はそのような計画があることを認識していません – Eralper

+0

両方のコメントのおかげで! – Irina

関連する問題