如何为模块化小部件设计数据库

时间:2013-07-21 23:51:43

标签: database database-design

我真的很难过,希望那些聪明的人都可以帮助我!

我对数据库设计的了解充其量只是中间道路。真是太好了,真的让我陷入困境。我首先是程序员。

我正在尝试建立一个网站,后端数据库的设计让我感到难过。

为了解释起见,我将在这里给出一个有点人为的例子,但这个例子是我需要实现的。

你正在为游戏Car Wars的老派粉丝建立一个数据库,或类似的东西。在这个游戏中,玩家可以选择几个基本车中的一个,然后自定义它以用于游戏。

每个基本车都有一些属性可供玩家自定义,例如引擎,传输和装甲。每辆车都有这些插槽,玩家可以将适当的物品放入这些插槽中。除了这些常见的插槽,每辆车还有N个安装座。这种情况因车而异,但每辆车至少有一辆,而大型车可能有十几辆。玩家可以将武器或实用物品放入这些坐骑中。一旦玩家配置了他们的汽车,它就会被保存为构建版本。这种构造基本上定义了他们选择的基础车,他们对发动机,传动装置和装甲的选择,以及他们放置在每个坐骑中的武器和物品。这是他们的个性化构建。

在第一级,表格布局非常简单。这就是我目前所拥有的:

有一个CAR表,其中包含汽车基本统计数据的字段,以及表示它可以支持引擎,传输和装甲的字段。 (例如,小型汽车可能只支持v4发动机和轻型装甲,而大型汽车可能支持v8和重型电镀)。

ENGINE,TRANSMISSION和ARMOR表,定义了这些项目的播放器的所有可用选项。

有一个MOUNTS表,它定义了挂载的大小,它所属的CAR,以及CAR在物理上的位置。

当然还有一个WEAPONS表和ITEMS表,用于定义可以进入坐骑的武器和物品,以及控制可以进入什么坐骑的尺寸等数据。

这是第一层,一切运作良好。问题是第二层,定义了在保存的BUILD的情况下所有这些连接的方式。我只是无法弄清楚如何在保存的构建环境中连接这些坐骑中的CAR,MOUNT和WEAPONS / ITEMS之间的所有点。

在BUILD表中,我可以指出基础车,发动机,变速器和装甲的选择很容易。存储他们选择的武器/物品会变得有点棘手。即使我暂时忽略了我需要知道每个装置的位置,但事实仍然是我可以安装N个武器/物品。每个构建都有可变的数量。所以我有一个(构建)到多个(武器)关系,但是如何在不为每个构建创建武器或项目的唯一实例的情况下定义该关系?当然,事实上还有一个额外的复杂性,即我不仅需要存储玩家选择的武器和物品,还需要存储他们放入的特定装载物。

如果我创建每个武器或项目的重复实例,并且该额外实例指向它所属的构建,并且mount存储在其中,那么我现在可能可以解决这个问题了,但这样做意味着对于每一个构建,我需要基本上创建所选择的每个武器或项目的副本,这看起来完全是愚蠢和浪费。

我确信这个问题有一个简单的解决方案。我要么只是失明而又想念它,否则我缺乏数据库设计经验会使我无法看到我需要看到的内容。所以假装你们都是欧比万克诺比和你唯一的希望!

如果有任何要求,我将确保编辑此内容以提供更多详细信息。谢谢!

编辑:不确定为什么会这么重要,但为了完整的信息,我在我的网站上使用django,所以数据库被抽象掉了。我在本地使用SQLite进行开发,但是实时服务器使用MySQL。

1 个答案:

答案 0 :(得分:0)

创建一个附加表,其目的是定义项目,安装和构建之间的链接。

BUILDLINK表中的每个条目都是项id,mount id和它所属的构建的id。这将是与BUILD表的多对一关系。