Database design 需要有关数据库设计问题的帮助I';我无法描述

Database design 需要有关数据库设计问题的帮助I';我无法描述,database-design,Database Design,我正在建立一个网站来展示《星际争霸2》的构建顺序指南,在存储实际构建时我需要帮助。构建包括多个步骤,如下所示: 9-建造塔架 13-建造大门 15-生成气体 16-建造塔架 18-构建控制论核心 现在,我最初认为我可以创建一个builds表,每个build都有自己的ID,但我不确定如何将每个步骤存储在自己的字段中,甚至不知道是否需要这样做 构建本身将在网站上显示为无序列表,因此可以存储整个构建的HTML。我不知道这类问题的术语是什么,每个记录中有不同数量的数据,因此需要不同数量的字段。任何关于最

我正在建立一个网站来展示《星际争霸2》的构建顺序指南,在存储实际构建时我需要帮助。构建包括多个步骤,如下所示:

9-建造塔架
13-建造大门
15-生成气体
16-建造塔架
18-构建控制论核心

现在,我最初认为我可以创建一个builds表,每个build都有自己的ID,但我不确定如何将每个步骤存储在自己的字段中,甚至不知道是否需要这样做


构建本身将在网站上显示为无序列表,因此可以存储整个构建的HTML。我不知道这类问题的术语是什么,每个记录中有不同数量的数据,因此需要不同数量的字段。任何关于最佳实践的建议都将不胜感激。

您可以有一个构建表,其中每个“构建”都有一条记录,然后是一个构建详细信息表,其中每个“构建”都有多条记录;构建中的每个项目一个。

请考虑以下表格:

所有者 身份证件 Fname 名字等等

构建 身份证件 地图名 所有者 外消旋体

BuildAction BuildID ActionID 序列

行动 身份证件 名称 外消旋体

比赛 身份证件 名字

  • 所有者定义指南的创建者,只有他们可以更新/更改指南
  • Build为特定地图/比赛定义了许多构建中的一个
  • 构建操作定义了构建的顺序,并且序列允许它们重新安排,而无需添加/移动
  • 操作限制了他们可以输入的数据,从而确保了构建的质量
  • Race将构建的可用操作限制为相关的Race

对于要构建的每个项目,都有一个或多个离散步骤,其中一些步骤必须在其他步骤之前进行。所以你有一个集合表。部件可以有子部件,它们也可以有子部件。每个程序集都有许多构建步骤。您可以使用两个表来完成此操作,其中一个表引用自身:

ASSEMBLY
assemblyid
assemblyname
parentAssemblyId  (references Assembly.Assemblyid)

NOTE: when parentAssemblyId = assemblyid, that assembly is the primary.


AssemblyStep
assemblystepid
assemblyid  (references Assembly.assemblyid)
stepordinal integer    (step's execution order in the critical path)
stepdescription

You could add tables such as AssemblyStepImages
imageid
assemblystepid
imagedescription

你可能应该考虑一个有很多“步骤”的构建表,你想用时间来显示它,对吗?另外,您可能有有限数量的操作,因此我将执行以下操作:

生成表示例数据:

id | Name
0,一些

步骤表示例数据:

id |时间|动作
090
1131
2152
3 16 0

行动表:

id | Name |可能是用于渲染的图像?
0建造塔架
1构建门


很抱歉格式化,我试着做html表格,但结果不正确

好主意所以每个构建细节记录都有一个ID,对应于它所属的构建,对吗?是的。BUILD表将有一个BuildID,也许还有一个BuildName,等等。BUILD\u DETAIL表将有一个BuildDetailID、BuildID、Sequence,以及您需要的任何其他数据。也许你也会有一个BUILD\u ITEM表,在那里你会保存一个项目列表,你的BUILD\u DETAIL表会通过BuildItemID引用它。太棒了,非常感谢。与另一个答案中的人所建议的非常相似,D:大家的共识是有一个构建表和另一个包含各个构建操作的表谢谢你告诉我我需要哪种类型的表的名称,非常有帮助。如果您决定采用这种方法,您可以阅读“SQL中的递归结构”。此外,将stepordinal更改为“float”数据类型以获得更大的灵活性——更容易插入步骤,而无需更改现有步骤序列。