2017-01-09 5 views
1

テーブルからタプルの主キーをどのように作成しますか?プライマリキーとしてのタプル

例 -

table a: [id|name] 
table b: [id|name] 
table axb:[a_id|b_id] 

今、私たちはタプル{α、β}が一意になるようAXBに主キーを追加します。つまり、表には行(アルファ、ベータ)と(ベータ、アルファ)を​​含めることはできません。これはntuplesにも及ぶだろうが、私はカップルがこれを簡単に保つように頼んでいる。

私は14.14/5.5.50のMySqlを使用していますが、それは問題ではないと思っています。複合キーがA_ID/B_ID上の複合キーとしてこれを解決しないことを

注意はまだ

+0

[複合主キーを正しく作成する方法 - MYSQL](http://stackoverflow.com/questions/5835978/how-to-properly-create -composite-primary-keys-mysql) –

+0

私はそれが重複しているとは思わない。私は、 '(1,3)'というエントリが既に存在するなら、OPは '(3,1)'のようなエントリが 'axb'に挿入されないようにしたいと思います。 –

+0

@StephanLechner – fieranmason

答えて

2

は、残念ながら、あなたがこれを行うには、トリガーを使用する必要が新しい行として逆のタプルの順序で行を可能にしますMySQLで。多くのデータベースは、次のような構文をサポートします。

構文は異なる場合がありますが、式や計算列のインデックスによってこの問題が解決されます。

もう1つの方法は、(check制約を使用)を要求してから、(alpha, beta)にユニークなインデックスを作成することです。トリガを残し

  • check制約
  • だから、表現上のインデックス
  • 計算列

、:

しかし、MySQLは次のどれをサポートしていません。

+0

ありがとう@ゴードン・リノフ。どのように残念。この具体的な例では、私は自己参照がないので、あなたの "チェック"ソリューションは素晴らしかったですが、新しいDBMSに移行する価値はありません。 – fieranmason

0

ちょうどそれを捨てる:列を常に順番に組み合わせた生成列を使用できますか(アルファ、ベータ=アルファベットとベータ、アルファ=アルファベット)、その生成列に一意のインデックスを作成しますか? MySqlは私のバッグではありませんが、これは可能でなければならないと言います。https://dev.mysql.com/doc/refman/5.7/en/create-table-secondary-indexes.html

関連する問題