我真的很难过,希望所有聪明的人都可以帮助我!
我在数据库设计方面的知识充其量只是中间。刚刚好到让我真正陷入困境。我首先是一名程序员。
我正在尝试建立一个网站,后端数据库的设计让我很困惑。
为了解释起见,我将在这里举一个有些人为的例子,但这个例子是我需要实现的。
想象一下,您正在为游戏 Car Wars 或类似游戏的老派粉丝建立一个数据库。在这个游戏中,玩家可以选择几辆基础车中的一辆,然后对其进行定制以在游戏中使用。
每辆基础车都有一些属性供玩家自定义,例如引擎、变速箱和装甲。每辆车都有这些插槽,玩家可以将适当的物品放入这些插槽中。除了这些公共插槽外,每辆车还有 N 个坐骑。这因汽车而异,尽管每辆车至少有一个,而一辆大型汽车可能有十几个或更多。玩家可以将武器或实用物品放入这些坐骑中。一旦玩家配置了他们的汽车,它就会被保存为一个构建。该构建基本上定义了他们选择的基础汽车,他们对发动机,变速箱和装甲的选择,以及他们在每个坐骑中放置的武器和物品。这是他们的个性化构建。
在第一级,表格布局非常简单。这是我目前拥有的:
有一个 CAR 表,其中包含汽车基本统计数据的字段,以及指示它可以支持的引擎、变速箱和装甲的字段。(例如,小型汽车可能只支持 v4 发动机和轻型装甲,而大型汽车可能支持 v8 和重型装甲)。
ENGINE、TRANSMISSION 和 ARMOR 表定义了玩家对这些项目的所有可用选择。
有一个 MOUNTS 表,它定义了安装的大小、它属于什么 CAR 以及它在 CAR 上的物理位置。
当然还有 WEAPONS 表和 ITEMS 表,定义了可以进入坐骑的武器和物品,以及用于控制可以进入什么坐骑的尺寸等数据。
这是第一层,一切都很好。问题是第二层,定义了在保存的 BUILD 的情况下所有这些如何连接。我只是不知道如何在保存的构建上下文中连接这些坐骑中的汽车、坐骑和武器/物品之间的所有点。
在 BUILD 表中,我可以让它指向基础车,引擎、变速箱和装甲的选择很容易。存储他们选择的武器/物品变得有点棘手。即使我暂时忽略了我需要知道每个安装在哪个坐骑中,但事实仍然是我可以安装 N 件武器/物品。每个构建将具有可变数量。所以我有一个(构建)到多个(武器)的关系,但是如果不为每个构建创建一个唯一的武器或物品实例,我将如何定义这种关系?当然,还有一个复杂的事实是,我不仅需要存储玩家选择的武器和物品,还需要存储他们放入的特定坐骑。
现在,如果我创建每个武器或物品的重复实例,并且该额外实例指向它所属的构建,并且安装存储在其中,那么我可能可以摆脱这种混乱,但是这样做意味着对于每个构建我需要创建每个所选武器或物品的副本,这似乎完全愚蠢和浪费。
我确信这个问题有一个简单的解决方案。我要么只是失明而错过了它,要么是我缺乏数据库设计经验使我无法看到我需要看到的东西。所以假装你们都是欧比旺克诺比,你们是我唯一的希望!
如果需要,我一定会对其进行编辑以提供更多详细信息。谢谢!
编辑:不知道为什么这很重要,但为了完整的信息,我在我的网站上使用 django,所以数据库被抽象出来。我在本地使用 SQLite 进行开发,但实时服务器使用 MySQL。