0

ERDにいくつかのテーブルがあり、それらをリレーショナルに組み合わせたいと思います。

いくつかのユースケースがありますが、テーブル間でどのような関係を使用するかが完全にわかりません。

  • すべてのユーザーは複数のプロジェクトで作業できます。
  • すべてのユーザーには、プロジェクトごとに1つの特定の役割があります(マネージャー、寄稿者、ユーザー)
  • すべてのプロジェクトには、テーブルデータにリンクする必要がある複数のデータセット(「プロジェクト」のcurrDataXXX列)があります。
  • アプリケーションは、ユーザーによって追加されたデータセットを追跡します。したがって、テーブル「users」と「data」の間にも関係が必要だと思いますか?

2つのPKを持つテーブル「roles」のブリッジモデルを使用して、ユーザーとプロジェクトをリンクし、そのユーザーとプロジェクトのロールを同時に定義しました(これは正しい方法ですか?)。

誰かが私がテーブル間の正しい関係を助けるのを手伝ってくれませんか?また、テーブル(またはもちろんテーブル全体)の列(欠落している)を提案することもできます。

これを見失ったようなものです。

よろしくお願いします。

B。

改訂版:( 代替テキスト 元の画像:http://i55.tinypic.com/2mq2ejs.jpg

4

3 に答える 3

0

すべてのユーザーは複数のプロジェクトで作業できます。

これは多対多の関係であるため、ユーザーとプロジェクトのIDで行ったように、中央のテーブルを使用する必要があります。

すべてのユーザーには、プロジェクトごとに1つの特定の役割があります(マネージャー、寄稿者、ユーザー)

上記のこのテーブルに3番目のフィールドを追加して「RoleID」と呼び、「RoleID」と「Role」の2つのフィールドを含む「Roles」という別のテーブルを作成する必要があります。

于 2010-10-29T11:14:58.070 に答える
0

テーブルを設計してから関係を構築するのではなく、両方を同時に進化させる必要があります。

特に、外部キー宣言を必要としないデータベースを使用している場合は、厳密な命名規則を使用することをお勧めします。関係を示したテーブルに対してこれを行っているように見えますが、残りのフィールド名はやや危険なようです。

しかし、すべての分析を確認せずに(そしてそれが正しいことを知らずに)、テーブルをどのように結合する必要があるのか​​、何が欠落しているのかを誰もが知ることは実際には不可能です。

于 2010-10-29T11:37:10.760 に答える
0

すべてのプロジェクトには複数のデータセットがあります(「プロジェクト」のcurrDataXXX列)

これは、プロジェクトからデータセットまで1対多の関係があることを意味します。そのため、プロジェクトIDはデータセットテーブルの外部キーである必要がありますが、currDataXX列はプロジェクトテーブルから削除する必要があります。(現在の設計は非正規化を表しています。)

これにより、プロジェクトとユーザーの間に2つの多対多の関係ができます。1つはロールのリンクエンティティ、もう1つはデータセットのリンクエンティティです。このような関係は通常冗長です。この場合、a)プロジェクトで役割を持つユーザーのみがデータセットを追加でき、b)1人のユーザーが1つのプロジェクトに多数のデータセットを追加できると想定します。

これらの両方の仮定が正しい場合、実際にはロールとデータセットの間に1対多の関係があるため、ロールIDはデータセットテーブルの外部キーである必要がありますが、ユーザーIDとプロジェクトIDはデータセットテーブルで冗長になります。削除することができます。このような:

+----------+    +----------+    +----------+
|   User   +---<|   Role   |>---+  Project |
+----------+    +----+-----+    +----------+
                     |
                    /|\
                +----------+
                |  Dataset |
                +----------+

[仮定b)が正しくない場合、役割とデータセットを1つのテーブルに結合できますが、仮定a)が正しくない場合、役割とデータセットは2つの別個のリンクエンティティのままであり、相互に関連していません。]

編集-Rhizosisの編集に続いて、提案された構造を更新しました:

                +----------+
                |   Role   |
                +----+-----+
                     |
                    /|\
+----------+    +----------+    +----------+
|   User   +---<|  Users/  |>---+  Project |
|          |    | Projects |    |          |
+----------+    +----+-----+    +----------+
                     |
                    /|\
                +----------+
                |  Dataset |
                +----------+
于 2010-10-29T11:39:01.133 に答える