2

私は次のデザインのデータベースを使用しています。データベース設計に閉ループを設定するのは良い習慣ではないことを読みました。複数のループがあります。しかし、その理由は思い出せません。だから、これが私にどのように影響するかわからない。これがどのように危険である可能性があるかの例はありますか?

私たちのデータベースの一部の概略図

編集:私の電子ブックを調べて、私が読んでいたのは、初心者から専門家までのデータベース設計の開始、出版社:APRESSであることがわかりました。
彼らはこれに対して警告するだけですが、漠然とした理由を示しています。いいえ、トリガーは使用していません。誰かがより明確な説明を持っていますか?
ありがとう抜粋、p.109:

小さな会社には、さまざまな小さなプロジェクトグループの1つで働く従業員がいます。各グループとそのすべての従業員は1つの特定の部屋に収容され、大きな部屋には複数のグループが収容されます。各従業員の所在地、特定の従業員の電話番号、特定のグループの場所、各グループで働く従業員などの情報が必要になる場合があります。 、各部屋にいる人など。考えられるデータモデルの1つを図5-7に示します。この特定の問題について、データモデルと、部屋のグループ数などに関するデータモデルに含まれる情報を理解してください。モデルには冗長な情報があります。あなたはそれが何であるかを見ることができますか?

図の例

例5-3に関して、従業員の電話番号を定期的に検索したい場合は、図5-7の従業員と部屋の最上位の関係が有用な直接ルートであると考えるかもしれません。ただし、これと同じ情報は、グループを介した代替ルートで非常に簡単に入手できます。従業員の(1つだけの)グループを見つけてから、そのグループの(1つだけの)部屋を見つけることができます。これは非常に簡単な検索です(例5-2の小さなホステルを悩ませた日付の複雑さをすべて含んでいるわけではありません)。ただし、余分な関係は不要なだけでなく、危険です。同じ情報に対して2つのルートがあるため、データが非常に注意深く維持されていない限り、2つの異なる回答が得られるリスクがあります。従業員がグループを変更したり、グループが部屋を移動したりするたびに、更新する2つのリレーションシップインスタンスがあります。非常に注意深い更新手順がないと、ジムがグループA(ルーム12)にいることになり、他のルートではジムがルーム15に直接関連付けられている可能性があります。冗長な情報は矛盾する傾向があるため、常に削除する必要があります。

4

3 に答える 3

4

すべてのデータベースで遅延関係チェックが有効になっているわけではなく、すべてのデータベースで2つのレコードを1つのステートメントの2つの異なるテーブルに挿入できるわけではありません。

からとへの移動があると想像しFOREIGN KEYてください。ABBA

最初は、両方のテーブルが空です。

最初のレコードをどのように挿入しますか?

Aのレコード(空)を参照する必要があるため、に何も挿入できません。B同様に、に何も挿入できませんB

于 2010-01-11T13:24:55.247 に答える
1

「閉ループを持つのは良い習慣ではない」とは言いません。ただし、潜在的な問題に注意を向けます。したがって、この問題の可能性についてすべての閉ループをチェックすることは良い習慣です。

教科書の例は私には非常に明確に思えます。従業員の場所/電話を決定する方法は2つあります。

  • 従業員->グループ->部屋->電話
  • または従業員->部屋->電話

これは、同期を保つ必要がある同じものの2つの変数を格納するようなものです。何かがうまくいかず、変数の値が異なる可能性があります。その場合、「2つのうちどちらが正しいか」と尋ねる必要があります。

したがって、教科書の例は、あなたが私たちに注意しなければならない問題を浮き彫りにします。ただし、問題は実際にはセマンティクスに要約されます。つまり、関係はどういう意味ですか。教科書の例では、両方のパスがRoomまったく同じことを意味します。ただし、Group -> Room上級従業員が自分の部屋を確保できるため、または従業員が一時的にグループから離れた場所で働くように割り当てられる可能性があるため、が各従業員の単なる「デフォルト」である場合、追加の関係は正当化されます。

あなたのデザインに移ると、これはあなたがすべきことです:

  • クローズドグループを探す
  • 関係のセマンティクス/目的/意味を評価する
  • まったく同じ情報への2つのパスを作成しただけではないことを確認してください。

たとえば、次のようになります。

  • TestSample->コイル->スラブ
  • TestSample->プレート->スラブ

あなたの用語のおそらくばかげた理解を許してください。)これはあなたのテストサンプルが同時に2つの異なるスラブにあることができることを意味しますか?それとも、テストサンプルがプレートとコイルで構成されていることを意味しますか?(必ずしもそうとは限りませんが)異なるスラブからのものである可能性がありますか?

于 2010-01-22T19:44:07.350 に答える
1

私は過去に、テーブルのグループ間で「閉ループ」参照を使用して問題が発生したことはありません(つまり、リレーションシップループで少なくとも3つ)。私が考えることができる唯一の問題は、トリガーを使用する場合であり、それでも、トリガーの「ループ」内の他のテーブルを更新する場合にのみ問題になります。

閉ループがないためのこのアドバイスをどこで読んだかについてのリファレンスはありますか?

新しいウィンドウへのリンクをコピーすると、画像にコメントした他の人に見ることができます:http: //imgur.com/ChFL1

于 2010-01-11T13:12:32.153 に答える