2010-11-30 3 views
7

私のテーブルに列があります。オプションですので、空白のままにすることができます。ただし、その列に値が指定されている場合は、一意でなければなりません。二つの質問:データベース設計:オプションですが、値が指定されている場合は一意である必要があります

  1. どのように私は私のモデルに潜在的な問題があります
  2. (私は道では、MySQL Workbenchを使用しています)私のデータベース設計でこれを実装するのですか?
+1

回答者(2)。いいえ、これはかなり正常です。 –

答えて

4

カラムにはUNIQUEのインデックスを使用してください。参照:

http://dev.mysql.com/doc/refman/5.1/en/create-index.html

をUNIQUEインデックスは、インデックス内のすべての値は 明確でなければいけないという ような制約を作成します。 既存の行と一致するキー値 を持つ新しい行を追加しようとすると、エラーが発生します。すべての エンジンでは、UNIQUEインデックスでは、 にNULLを含むことができる列のNULL値が に複数許可されます。 UNIQUE 索引内の列に接頭辞値 を指定する場合は、接頭辞内で列の値が一意で である必要があります。

2

ヌル(空白ではない)で一意である可能性があります。デフォルトでは、値はnullでもかまいません。私には問題ありません。

1

テーブルにUNIQUEインデックスを作成できます。 MySQLワークベンチでは、テーブルの作成/編集時にUQチェックボックスが使用されます。

0

ステップ1 ALTERテーブルMODIFYフィールドNULLが許可されます。

ALTER TABLE my_table MODIFY my_field VARCHAR(100) NULL DEFAULT NULL; 

ステップ2、フィールドにUNIQUEインデックスを追加します。それは一見やや直感的であることをNULL値可能フィールドにUNIQUEインデックスを置くと私の唯一のためらいを -

ALTER TABLE my_table ADD UNIQUE INDEX U_my_field (my_field); 

これは、使用する罰金です。

0

1)列を新しい表に移動し、一意にし、NULLを入力できないようにします。この新しいテーブルには、値がある場合にのみ行が作成できるようになりました。

2)はい。キーに対するキーと依存関係は、リレーショナルデータベース設計におけるデータの整合性の基礎となります。属性が一意であると想定されている場合は、属性をキーとして実装する必要があります。 null可能な "キー"はキーではなく、とにかく新しいテーブルに移動でき、情報を失うことなくヌルにすることができないため、決して必要ではありません。

関連する問題