m-to-n关系表的原始密钥或外键

时间:2017-01-13 02:37:59

标签: database postgresql database-design

我的数据库中有一个用于建模m-to-n关系的表。这种关系的主键当然是这种关系中涉及的2个实体的组合主键。

这种关系是这样的:m个客户有n个订单

create table customer(
cid             SERIAL PRIMARY KEY,
...
);


create table order(
oid             SERIAL PRIMARY KEY,
...
);


create table has(
oid             INTEGER REFERENCES order(oid) ON DELETE CASCADE,
cid             INTEGER REFERENCES customer(cid) ON DELETE CASCADE,
FOREIGN KEY (oid,cid) or PRIMARY KEY (oid,cid)
);

我对这里使用的内容有点困惑:主键或外键将它们放在一起?

提前感谢您的帮助。

Jaiel

1 个答案:

答案 0 :(得分:1)

您应该在表PRIMARY KEY中使用has作为复合键。 has表中的订单和客户ID的组合是该表中的主键,因为它允许标识唯一的单个记录。

请注意,表oid中的cidhas都是外来键,指向ordercustomer表分别。