我剛剛開始學習數據庫設計,我正在使用Oracle 11G和SQL Developer。如何確保無關表格之間的完整性?
我有一個DB這3個業務規則:
- 每個人員必須在一個註冊只有一個保險公司。每個保險公司可以註冊一個或多個官員
- 每個保險公司必須提供至少五種不同類型的保險類型。每種保險類型最多可由4家保險公司提供,或根本沒有提供
- 每種保險類型可由一個或多個官員訂購。每個官員可以訂閱最多五個由同一家公司提供的不同保險箱。
。 。 。
到目前爲止,這麼好,我想出了五個表(INS_COY,OFFR,INS_TYPE,PROVIDE,和訂閱)。 PROVIDE和SUBSCRIBE是作爲組合表而來的,因爲INS_COY和INS_TYPE之間的關係,以及OFFR和INS_TYPE都是M:M關係。
每個表中的PK和FK屬性是如下:
INS_COY TABLE
coy_id - PK
主任TABLE
offr_id - PK
coy_id - (FK參考INS_COY.coy_id))
INS_TYPE TABLE
TYPE_ID - PK
PROVIDE
coy_id和TYPE_ID - (複合PK)
coy_id - (FK引用COY.coy_id)
type_id - (FK引用ins_type.type_id)
SUBSCRIBE
naf_no和TYPE_ID - (複合PK)
naf_no - (FK引用offr.offr_id)
TYPE_ID(FK參考ins_type.type_id)
。
。
。
表已成功創建,並插入了示例數據。
所以,問題是 - 在SUBSCRIBE TABLE上,我如何確保TYPE_ID附加到OFFR_ID的完整性是由註冊的COY提供的INS_TYPE?
即...從表格中,「主任4250」被登記在「忸怩1」,「靦腆1」不提供「ins_type 13」,但是,因爲沒有約束爲了檢查這個,「訂閱者1」訂閱了訂閱表上的「ins_type 13」。
Thanks @reaanb。好的解決方案我想我更喜歡使用觸發器,因爲我儘可能地避免冗餘。但是,我從來沒有使用過觸發器。那麼,如何使用觸發器來實現這一點? – IGee
我添加了一個例子,希望它有幫助。 – reaanb