【发布时间】:2015-09-11 14:19:10
【问题描述】:
我的数据库设计有问题。我正在制作一个浏览器游戏作为一个小项目,以帮助提高我对网站和数据库设计的整体理解。
当然,如果我自己不尝试找到解决方案,我就不会在这里发帖(这是搜索问题会发现其他问题的事情之一,例如“如何创建多 2 多表”)
情况:
有些建筑物/研究都是通过数据库实现的(以防止大量硬编码)
CREATE TABLE IF NOT EXISTS `structType` (
`idStructType` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`idRace` int(11) NOT NULL,
UNIQUE (name),
FOREIGN KEY (idRace) REFERENCES race(idRace),
PRIMARY KEY (idStructType)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
其中一些建筑和研究当然有科技树。
这是我的问题开始的地方:一个结构可以有多个结构作为要求以及多项研究。
它也反过来:
研究也可以有建筑物/其他研究作为要求。
所以我开始创建像这样的“多对多”解析组:
CREATE TABLE IF NOT EXISTS `structtypeReqStructtype` (
`idStructType` int(11) NOT NULL,
`idStructType_required` int(11) NOT NULL,
`level` int(11) NOT NULL,
UNIQUE (idStructType, idStructType_required, level),
FOREIGN KEY (idStructType) REFERENCES structType(idStructType),
FOREIGN KEY (idStructType_required) REFERENCES structType(idStructType)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
这最终给我留下了 4 张桌子,只用于结构和研究之间的技术树,更不用说船只和防御了,这对我来说是个糟糕的设计。
几乎必须有更好的方法来做到这一点。很高兴能在我应该采取的思考过程中获得一点帮助。
【问题讨论】:
标签: mysql database many-to-many relationship