0

Company と Owner という 2 つのテーブルがあります。現在、どちらも通常の形式ですが、 1 つの Company が多数のOwner を持つことができ、1 つの Owner が多数の Companies を持つことができるため、それらの間に多対多の関係を作成する必要があります。

CompanyOwners の配列 (所有者 UUID を含む) を Companies に追加すると、Normal Form が壊れるかどうかについて以前に回答まし

私の質問は次のとおりです。以下に示すように追加のジャンクション テーブルを作成すると、通常のフォームが壊れますか?

-- This is the junction table.
CREATE TABLE CompanyOwners(
    Connection-ID UUID NOT NULL, // Just the ID (PK) of the relationship.
    Company-ID UUID NOT NULL REFERENCES Company (Company-ID),
    Owner-ID UUID NOT NULL REFERENCES Owner (Owner-ID),
    CONSTRAINT "CompanyOwners" PRIMARY KEY ("Connection-ID")
)
4

2 に答える 2

1

あなたの構造では重複データが許可されています。たとえば、このようなデータが許可されます。(UUID は、水平スクロールを防ぐために省略されています。)

Connection_id            Company_id               Owner_id
--
b56f5dc4...af5762ad2f86  4d34cd58...a4a529eefd65  3737dd70...a359346a13b3
0778038c...ad9525bd6099  4d34cd58...a4a529eefd65  3737dd70...a359346a13b3
8632c51e...1876f6d2ebd7  4d34cd58...a4a529eefd65  3737dd70...a359346a13b3

リレーションの各行には、明確な意味が必要です。このテーブルでは、同じことを意味する何百万もの行が許可されます。

これらの線に沿ったものの方が優れています。5NFです。

CREATE TABLE CompanyOwners(
    Company_ID UUID NOT NULL references Company (Company_ID),
    Owner_ID UUID NOT NULL references Owner (Owner_ID),
    PRIMARY KEY (Company_ID, Owner_ID)
);

標準 SQL では、識別子に "-" を使用できません。

于 2013-12-27T14:36:29.220 に答える
0

これはそのままで問題ありませんが、次のような列をさらにいくつか追加できます

DateOwned Datetime  --<-- when the owner bought the company 
DateSold Datetime  --<-- when a the owner sold the compnay

結局のところ、会社はまだ同じ所有者によって所有されているか、会社の所有履歴などを追跡したい.

于 2013-12-22T22:23:23.163 に答える