2010-12-07 10 views
2

私は私が望むすべてが同じIDを持つ行のグループに社長を一意にするためにあるテーブル全体ではなく、行のグループでユニークを持つことは可能ですか?

 
CREATE TABLE IF NOT EXISTS grouped_executions (
    id    INTEGER UNSIGNET NOT NULL , 
    execution_id INTEGER UNSIGNED NOT NULL REFERENCES execution.execution_id , 
    president  BOOLEAN NOT NULL DEFAULT 0 

    PRIMARY KEY (id, execution_id) 
) ENGINE = InnoDB ; 

のようなテーブルを持っています。例えば

:私はこのようなデータを持っている:

 
id | execution_id | president 
= - = - = - = - = - = - = - = 
1 | 1   | 0 
1 | 2   | 1 
1 | 3   | 0 
1 | 4   | 0 
私はMySQLは(もちろん、グループの社長を保持しているが、別のテーブルを作ることができる= 1

ID = 1 &大統領と新しい行を挿入防止したいです上記の構造は可能ですか?)

+0

私はあなたが言ったように、より良いデザインは、別のテーブルに設定すると思います。 – Danosaure

+0

ええ!私は別のテーブルを作るつもりだ:)ありがとう – everplays

答えて

1

0。トリガーのような他のメカニズム(@David Hedlundで提案されている)を設定したくない場合は、その関係の別のテーブルを使用する方がよいでしょう。このようにして、ある日に一意の「秘書」や「財務省」が必要な場合、そのトリガー(または別のトリガー)がこの関係を確認するのではなく、新しいテーブルを定義するのは簡単です。

3

はい、2つの列の組み合わせに一意制約を追加できます。

+0

しかし、私は "ユニークキー" grouped_executions_id_president'( 'id'、' president') "私はできませんid = 1&president = 0、 em – everplays

+0

ああ、申し訳ありませんが、あなたの質問が間違っています。 MySQLのような特定の値に対してのみ一意性を指定できることは分かりません(私は間違っている可能性があります)。回避策は、トリガを使用して挿入または更新を検証することです。 –

-1

あなたはこれを試したことがありますか?

あなたに一意のキーに複数の NULL値を許可するが、その後、それは一種の一つだけ 1、多くの NULL秒で boolを持っている意味をなさない、ない presidentのデフォルトのNULLを設定しようとする場合があり
ALTER TABLE grouped_executions ADD CONSTRAINT PRIMARY KEY (id, president); 
+0

mysql> ALTER TABLE grouped_executions ADD CONSTRAINTプライマリキー(id、president); ERROR 1068(42000):複数の主キーが定義されています – everplays

+0

-1 OPが要求するものを実行しません。 (1,0)何度も許可されています。 – Danosaure

関連する問題