0

ENTERPRISESテーブルとDOMAINSテーブルがあります。各企業の特性は、単一のプライマリドメインを持つ必要があるということですが、複数のドメインを持つことができます。私はこのテーブル構造を思いついた

+---------------------------------------+
| ENTERPRISES                           |
+----+--------------+-------------------+
| ID | Name         | Primary Domain ID |
+----+--------------+-------------------+
| 1  | Enterprise A | 2                 |
| 2  | Enterprise B | 4                 |
+----+--------------+-------------------+

+---------------------------------------+
| DOMAINS                               |
+----+------------------+---------------+
| ID | Domain Name      | Enterprise ID |
+----+------------------+---------------+
| 1  | ent-a.com        | 1             |
| 2  | enterprise-a.com | 1             |
| 3  | ent-b.com        | 2             |
| 4  | enterprise-b.com | 2             |
+----+------------------+---------------+

私の同僚は、この代替構造を提案しました。

+-------------------+
| ENTERPRISES       |
+----+--------------+
| ID | Name         |
+----+--------------+
| 1  | Enterprise A |
| 2  | Enterprise B |
+----+--------------+

+----------------------------------------------------+
| DOMAINS                                            |
+----+------------------+---------------+------------+
| ID | Domain Name      | Enterprise ID | Is Primary |
+----+------------------+---------------+------------+
| 1  | ent-a.com        | 1             | False      |
| 2  | enterprise-a.com | 1             | True       |
| 3  | ent-b.com        | 2             | False      |
| 4  | enterprise-b.com | 2             | True       |
+----+------------------+---------------+------------+

私の質問は、どちらがより効率的/正しいですか?

また、最初の例では、プライマリドメイン列または文字列値にIDを使用する必要があるため、ENTERPRISESテーブルはDOMAINSテーブルに循環依存しませんか?

4

3 に答える 3

3

どちらも正しいです。しかし、FKに行きなさい。

提案するものはデータがまばらではありませんが、2番目の例では、同じ会社に属する100個のドメインがあり、すべてがにIsPrimary設定されFalse、1つのドメインのみがに設定されている場合がありTrueます。

また、最初のシナリオではプライマリドメインを1つだけ適用する方が簡単ですが、2番目のシナリオでは、トリガーまたはコードをチェックインして、プライマリドメインが常に1つだけであることを確認する必要があります。

繰り返しますが、FKに固執します。

于 2009-11-24T16:06:50.473 に答える
1

循環参照はOKです。循環依存はそうではありません。Primary Domain IDnull許容型である限り、問題はありません。そうしないと、鶏が先か卵が先かというシナリオが発生し、なしでを作成するDomainことはできませんが、なしでEnterprise作成することもできません。EnterprisePrimary Domain ID

1対1の関係を定義しているので、前者(提案されたソリューション)を選択します。Enterprise->Domain関係は1対多ですが、関係Enterprise->Primary Domainは1対1です。

于 2009-11-24T16:07:33.607 に答える
1

最初のモデルでは、エンタープライズには単一のプライマリドメインが必要であると言います。その瞬間を拡大して、単一のプライマリドメインを持つと言います。この時点で、その列をnull許容ではないとマークする傾向があります。

問題は、循環依存関係を作成したため、データを挿入できないことです。ドメインなしで企業を挿入することはできません。また、企業なしでドメインを挿入することはできません。

私は最初のモデルがよりクリーンでより明確であるため、それを好みます。モデルは、2番目のモデルには何もない単一のプライマリドメインがあることを強制するため、他のメカニズムを使用してこのルールを強制する必要があります。

于 2009-11-24T16:12:06.143 に答える