我有这两个表,公司和所有者。 现在他们都处于普通形式,但我需要在他们之间创建一个Many-to-Many关系,因为一个公司可以拥有许多所有者和一个所有者可以拥有多个公司
我之前得到的答案是,向公司添加一组CompanyOwners(带有所有者UUID)是否会破坏普通表格It will break Normal Form,并且能够收集到可以使用的是{{3} },请参阅Junction Table。
我的问题如下:将如下所示创建一个额外的连接表,打破正常形式?
-- 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")
)
答案 0 :(得分: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不允许在标识符中使用“ - ”。
答案 1 :(得分:0)
这很好,但你可以添加几个列,比如
DateOwned Datetime --<-- when the owner bought the company
DateSold Datetime --<-- when a the owner sold the compnay
毕竟你会想知道公司仍归同一所有者所有,并跟踪公司的所有权历史等。