2017-02-21 7 views
1

を:防ぎ重複例えば

我々はparent_dev_id(foreign key)を経由して自己に参照するid(primary key)とテーブル'device'を持っています。あなたは{id=1,parent_dev_id=NULL}でデバイスを持っていて、その中に複数のデバイスを追加したい場合は

は、次のデバイスは、ID = 2とPARENT_ID = 1または2つの装置id=3,id=4とデバイスid=2,parent_dev_id=NULLを持っていますが、それらはすべて同じparent_dev_id=2を持っています。

id == parent_dev_idの特定の状況を拒否または制限することはできますか?私たちはそれはあなたが見ることができるように、これはテーブル enter image description here

ある

可能になりたいいけないので、{id=3,parent_dev_id=NULL}持つデバイスは、その中に2つの他のデバイス などがあります。デバイスは{id=4,parent_dev_id=3}、デバイスは{id=5,parent_dev_id=3}で、デバイスはデバイス内にあります。 が、それは、TTはどんな利益

+0

申し訳ありません申し訳ありませんがあなたの例を理解しています。たぶんあなたがテーブルのようなデータを投稿する場合、[** This **](http://stackoverflow.com/questions/42353860/how-do-i-select-a-variable-row-in-sql-サーバー/ 42354610#42354610)、許可されるものと禁止されるものについて説明します。 –

+0

サンプルテーブルを使って再度説明できますか?何がいいですか、それは何ですか? –

+0

[コードの画像をアップロードするのはなぜですか(http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on) -so-when-asking-a-question/285557#285557) –

答えて

0

せずに自分自身を参照するデバイスの無限ループになることを私たちは{id=3,parent_dev_id=NULL}あなたが{parent_dev_id=3} .IFを追加傾けるようにするために、最初の行に{id!=parent_dev_id}を制限することが可能であることを、あなたのソリューションのための2つのオプションがあります。ここで行うことができます。

  1. idparent_id
  2. はどこparent_idid同じことを行うには、挿入前にトリガーとしてデータベース内のロジックを書く等しくないあなたのコード内のロジックを書きます等しいことはできません。

実行する問題は、idが生成IDである場合です。それからあなたが求めている状況を持つのは難しいでしょう。挿入時には、これは外れ値の状況かもしれません。ただし、有効な問題の可能性がある更新の場合は、idparent_idが等しくないレコードの更新のためのトリガを#2に設定する必要があります。

+0

私はそれを持っていると思う、ありがとう –

関連する問題