【发布时间】:2017-04-14 14:25:25
【问题描述】:
我最近刚开始学习数据库设计,目前正在使用 Oracle 11G 和 SQL Developer。
我有这 3 个 DB 业务规则:
- 每位官员必须注册一家且仅一家保险公司。每个保险公司可以招收一名或多名高级职员
- 每个保险公司必须提供至少五种不同类型的保险类型。每种类型的保险最多可以由 4 家保险公司提供,或者根本不提供。
- 每种保险类型都可以由一名或多名官员订阅。每个官员最多可以订阅同一家公司提供的五种不同的保险。
。 . .
到目前为止,非常好,我想出了五个表(INS_COY、OFFR、INS_TYPE、PROVIDE 和 SUBSCRIBE)。 PROVIDE 和 SUBSCRIBE 是作为复合表出现的,因为 INS_COY 和 INS_TYPE 之间的关系,以及 OFFR 和 INS_TYPE 之间的关系都是 M:M 关系。
各表的PK和FK属性如下:
INS_COY 表
coy_id - PK
OFFR TABLE
offr_id - PK
coy_id -(FK 引用 INS_COY.coy_id))
INS_TYPE TABLE
type_id - PK
提供
coy_id 和 type_id -(复合 PK)
coy_id -(FK引用 COY.coy_id)
type_id - (FK 引用 ins_type.type_id)
订阅
naf_no 和 type_id -(复合 PK)
naf_no -(FK引用 offr.offr_id)
type_id (FK 引用 ins_type.type_id)
.
.
.
表已成功创建,示例数据已插入。
所以,问题是 - 在 SUBSCRIBE 表中,我如何确保附加到 OFFR_ID 的 TYPE_ID 是他注册的 COY 提供的 INS_TYPE 的完整性?
即...从表格中,“offr 4250”注册在“coy 1”中,而“coy 1”不提供“ins_type 13”,但是,因为没有限制检查这一点,“offr 1 " 订阅了 SUBSCRIBE TABLE 上的 "ins_type 13"。
【问题讨论】: