我在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之间有一个链接表,我在代码中强制执行每个平台的唯一性,但是我宁愿在数据库中强制执行一个解决方案,这样就没有人可以解决这个问题并破坏事物。我宁愿首先没有这么多关系,但这并不适合我们的商业模式。
答案 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
分配给Group
(SymbolSetToGroup
中的新行),则必须首先将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}}