0

テーブル User とテーブル SuperUser を使用して (単純化して) DB をセットアップする場合があります。どちらにも列 ID があります。すべての SuperUser 行には、User テーブルに同じ Id 値を持つ行があります (私のデザインではありません!!!)。SUperUser テーブルは、User テーブルから共通情報を取得せず、複製します。

User.Id を指す外部キーも、SuperUser.Id との FK:PK 関係を持つことができますか? これに対する私の見解は、少なくとも非常に悪い考えであり、多くの (ほとんどの?) DB はこの関係を強制できないということです/

私はここで基地外ですか?

4

2 に答える 2

2

あなたの質問に対する私の理解に基づいて、User テーブルと SuperUser テーブルの両方に設定された外部キーで 2 つの大きな問題が発生します。

  1. 外部キーはユーザー ID が両方のテーブルに存在することを想定しているため、ユーザーが両方のテーブルに存在しない限り、そのように設定された外部キーを使用してテーブルを入力または更新することはできません。

  2. カスケード削除を使用して外部キーを設定し、スーパーユーザーからレコードを削除すると、その設定を使用したすべてのテーブルがそのユーザー ID に関連付けられたレコードを削除し、ユーザー テーブルのレコードだけが残り、他のすべての情報が失われる可能性があります。

より良いオプションは、SuperUser テーブルの userid 列を User テーブルの userid 列の外部キーに設定して、ユーザーが両方のテーブルにない、またはユーザーを削除するという問題に遭遇しないようにすることです。スーパーユーザー テーブル。

于 2012-07-24T17:29:51.713 に答える
1

すべてのユーザーがユーザー テーブルにレコードを持っており、すべてのユーザーがスーパー ユーザーであるとは限らないと想定しているため、ユーザーごとにそれらを参照し、必要に応じてそれらがスーパー ユーザーであるかどうかを確認します。

可能であれば、重複したフィールドを削除することをお勧めします。物事が成長するにつれて、これを維持するのは簡単に悪夢になる可能性があります.

于 2012-07-24T17:34:30.760 に答える