MySQL多级约束

时间:2011-12-02 19:24:00

标签: mysql database-design

我在MySQL中执行数据模型时遇到了问题,我想知道是否有更好的方法可以做到这一点。

型号:

Platforms <- Has many groups

Groups <- Has one platform, Has many SymbolSets

SymbolSets <- Belongs to many groups

我的问题是SymbolSets只能属于具有相同平台的组。因此,如果平台A具有符号集A的组A,则具有组B的平台B不应该能够获得符号集A,但是平台A中的任何组都应该能够获得它。

现在我在SymbolSets和Groups之间有一个链接表,我在代码中强制执行每个平台的唯一性,但是我宁愿在数据库中强制执行一个解决方案,这样就没有人可以解决这个问题并破坏事物。我宁愿首先没有这么多关系,但这并不适合我们的商业模式。

1 个答案:

答案 0 :(得分:3)

Platform     
----------
PlatformId
PRIMARY KEY (PlatformId)

Grouping        
----------
GroupingId
PlatformId
PRIMARY KEY (GroupingId, PlatformId)
FOREIGN KEY (PlatformId)            
  REFERENCES Platfrom(PlatformId)

SymbolSet         
----------
SymbolSetId 
PRIMARY KEY (SymbolSetId)

如果要将SymbolSet分配给GroupSymbolSetToGroup中的新行),则必须首先将Platform分配给与Group相同的SymbolSetAssigned {1}}属于(首先是SymbolSetAssigned --- assigned to Platform ----------------- SymbolSetId PlatformId PRIMARY KEY (SymbolSetId) UNIQUE KEY (SymbolSetId, PlatformId) FOREIGN KEY (SymbolSetId) REFERENCES SymbolSet(SymbolSetId) FOREIGN KEY (PlatformId) REFERENCES Platfrom(PlatformId) SymbolSetToGroup ---------------- SymbolSetId GroupingId PlatformId PRIMARY KEY (SymbolSetId, GroupingId) FOREIGN KEY (SymbolSetId, PlatformId) REFERENCES SymbolSetAssigned(SymbolSetId, PlatformId) FOREIGN KEY (GroupingId, PlatformId) REFERENCES Grouping(GroupingId, PlatformId) 中的新行)。

{{1}}