2

私の質問はかなり単純なようですが、残念ながらこれに対する満足のいく答えが見つかりませんでした。

次の例を見てください。

ここに画像の説明を入力

テーブルは作成Author者を定義し、Document少なくとも 1 人の作成者をAuthors持ち、ドキュメントに含まれるすべての作成者をテーブル グループにまとめます。

私の質問は次のとおりです。ドキュメントを挿入するたびに、作成者のグループがテーブル Authors に既に存在するかどうかを確認する必要があります。

これを行う最善の方法は何ですか?まず、このグループが既に存在するかどうかを確認する必要があると思います。次に、その ID を取得する (既に存在する場合) か、新しいレコードを生成するAuthors(グループが存在しない場合)。

質問:

これは、多対多の多重度を持つテーブルで発生する正しいロジック プロセスですか?

テーブル Authors に値のグループが既に存在するかどうかを確認するにはどうすればよいですか??

このようなものがありますがselect * from Authors where a_id IN(1,2,3)、排他的な方法です。:S

どんな助けでも素晴らしいでしょう。

ありがとう

4

2 に答える 2

1

むしろ、3 つのテーブルを使用したソリューションを使用したいと思います。

Author
Document
rel_author_document

そしてrel_author_document、次のような構造になります。

author_fk
document_fk

新しいグループを追加する必要はありませんが、作成者をドキュメントに関連付けるだけです。

そのようなものが必要な場合は、rel_author_documentのような追加の列を追加することもできます。role

このアプローチでは、同じ作成者グループの 2 つのドキュメントを作成できますが、パフォーマンスが低下することはありません。

質問が宿題で、テーブル構造を変更できない場合:

  1. Authors テーブルをクエリして、次のような where 条件で同じ数の author_id を持つ Author のグループがあるかどうかを確認します。

    select count(1) cnt from Authors where a_id IN(1,2,3)

  2. cntが の数と異なる場合はauthor_id、新しいグループを挿入します

  3. cntが等しい 場合、その作成者グループの ID を取得します。

      select ID 
        from Authors 
       where a_id = 1
          or a_id = 2
          or a_id = 3   
    group by 1
      having count(1) = 3
    
于 2015-11-16T14:48:21.590 に答える
0

「多対多」の関係である場合、探しているテーブル構造は次のとおりです。

著者 ( a_id、名前、生年月日、ドメイン)

ドキュメント ( d_id、要約、年)

Auth_Doc ( a_id 、 d_id )

著者のグループが既に存在するかどうかを確認するという点では、データをどのように表示しているかによって異なります。ドキュメントをアップロードしていて、一連の作成者が存在するかどうかを確認したい場合は、次のようにします。

データが次のように保存されているとします。

a_id | 名前

1 | ジョン、ジャック、ボブ

SELECT * FROM Author WHERE name like '%john%'

これが役に立てば幸いです。

ソハイル

于 2015-11-16T14:34:09.210 に答える