簡體   English   中英

對於這些約束,合適的表/數據庫設計是什么?

[英]What would be an appropriate table/database design for these constraints?

給定4張桌子,

表“基地”

  • 有一個 id 列(主鍵)

表“實例”

  • 有一個 id 列(主鍵)
  • 有一個 base_id 列(表'base'的外鍵)

表“修飾符”

  • 有一個 id 列(主鍵)
  • 為簡單起見,假設 2 列定義最小值和最大值。

表'base_has_modifier'

  • 有一個 base_id 列(表'base'的外鍵)
  • 有一個 modifier_id 列(表“修飾符”的外鍵)

我試圖對 model 的約束是,實例只能將修飾符綁定到其基礎。

目前我有這個,

表“instance_has_base_modifier”

  • 有 instance_id(來自“實例”)
  • 有base_id(來自'base_has_modifier')
  • 有modifier_id(來自'base_has_modifier')
  • 為簡單起見,假設 1 列包含最小值和最大值之間的值,如表“修飾符”下定義

如您所見,這允許實例具有來自其他基礎的修飾符。

現在的問題是,model 是否可以通過強制實例僅將修飾符標記到其基礎的方式來實現? 如果是這樣,怎么做? 如果不是,為什么?

謝謝你。

-- Base BAS exists.
--
base {BAS}
  PK {BAS}
-- Base BAS has instance number INS#, of that base.
--
instance_ {BAS, INS#}
       PK {BAS, INS#}

FK1 {BAS} REFERENCES base {BAS}
-- Modifier MOD exists.
--
modifier {MOD}
      PK {MOD}
-- Modifier MOD applies to base BAS
--
base_mod {BAS, MOD}
      PK {BAS, MOD}

FK1 {BAS} REFERENCES base     {BAS}
FK2 {MOD} REFERENCES modifier {MOD}

選項1

如果基礎修飾符適用於該基礎的所有實例

-- Modifier MOD applies to instance number INS# of base BAS.
--
CREATE VIEW inst_mod
AS
SELECT i.BAS
     , i.INS#
     , b.MOD
FROM instance_  AS i
JOIN base_mod   AS b ON b.BAS = i.BAS ;

選項 2

如果一個基礎修飾符可能會或可能不會應用於該基礎的實例。

-- Modifier MOD applies to instance number INS# of base BAS.
--
inst_mod {BAS, INS#, MOD}
      PK {BAS, INS#, MOD}

FK1 {BAS, INS#} REFERENCES instance_ {BAS, INS#}
FK2 {BAS, MOD}  REFERENCES base_mod  {BAS, MOD}

筆記:

All attributes (columns) NOT NULL

PK = Primary Key
FK = Foreign Key

Using suffix # to save on screen space.
OK for SQL Server and Oracle, for others use _NO.
For example, rename INS# to INS_NO.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM