gpt4 book ai didi

mysql - 多个表上的多对多关系

转载 作者:行者123 更新时间:2023-11-30 22:36:02 24 4
gpt4 key购买 nike

我的数据库设计有问题。我正在制作一个浏览器游戏作为一个小项目,以帮助提高我对网站和数据库设计的整体理解。
当然,如果我自己没有尝试找到解决方案,我就不会在这里发帖(这是搜索问题时发现其他问题的其中一件事,比如“如何创建多 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 个表格,仅用于结构和研究之间的技术树,更不用说船舶和防御工事了,这对我来说是糟糕的设计。
几乎必须有更好的方法来做到这一点。很高兴能在我的思考过程中得到一点帮助。

最佳答案

这是一个非常开放的问题,但这里有一些想法:

  • 您有研究项目、建筑物和单位。我假设所有这些都具有“研究/构建”的能力(成本、时间)。
  • 你有先决条件的概念。您必须在 build 单元 Z 之前完成研究 X/ build 建筑物 Y。

我认为最干净的设计可能是一张包含所有“可构建物”(包括研究项目)的 table 。这可能只是成本、构建器(指向可构建表的链接)、名称和 ID。

您可以在此之上添加一个扩展表。您制作了一个引用一个“可构建”的“结构”表,并添加了“结构”需要的任何额外字段。

最后,您可以制作一个“先决条件”表。这有两个可构建的 ID,一个用于相关的可构建项,一个用于必需的项目。现在您没有 structToResearch、structToStruct、researchToStruct 和 researchToResearch 的单独必需表。

TL:DR; 创建一个多对多关系有意义地适用的基表。为每个类型制作特定的表,这些表包含基表的外键。

关于mysql - 多个表上的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32525682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com