MySQL 子实体

标签 mysql database entity hierarchy

我正在开发一个项目,我希望类别“Items”在 MySQL 中具有子实体。

在我的情况下,主要实体称为“项目”,但是我需要将它们分成更小的部分,例如:

  • 消耗品
  • 药物
  • 装备/工具
  • 盔甲
  • 远程武器
  • 近战武器。

这些子实体还需要一些子实体。例如远程武器需要子实体:

  • 火焰武器
  • 原始武器
  • 启动器
  • 手榴弹
  • 奇异武器

我尝试过搜索它,但似乎找不到任何解决方案。我如何设计这些实体?

此外,当我执行简单的 SELECT * FROM item 时;然后它会显示所有子类别中的所有项目吗?

或者它只会显示那些直接插入到项目实体中的内容?

最佳答案

有几种方法可以处理这个问题。

一,创建一个项目表,其中包含与每行关联的相关 ID。

例如,

id,type,category,subcategory 
1, item, NULL, NULL
2, item, Consumables, NULL
3, item, Drugs, NULL
.
.
.
x, item, Ranged Weapons, NULL,
.
.
.
y,item, Ranged Weapons, Flame weapons
z,item, Ranged Weapons, Primitive weapons

虽然这个表很容易查询,但它也很难维护。另外,如果您不存储 id 而是存储文本值,它会很快变大(并且更难以维护)

现在,另一个选择是使用树结构。为此,您可以尝试创建如下所示的项目表:

id,name,level,parent_id
0, Items,0,NULL
1,Consumables,1,0
2,Drugs,1,0
.
.
.
x,Ranged weapons,1,0
.
.
.
y,Flame weapons,2,x
z,Primitive weapons,2,x

在此表下,您可以查询 WHERE Parent_id = x 的项目(换句话说,远程武器)。您可能需要稍微嵌套查询,具体取决于您有多少级别。但逻辑通常相当简单。

如果我只有几个级别,就像您所描述的那样(一些含义不是 10、20 或 100),那么毫无疑问我会像第二个示例那样创建树结构。如果您确实有多个级别,则需要考虑将针对其运行的实际查询,并可能查看各种范式 ( http://en.wikipedia.org/wiki/Database_normalization ) 来表示您的数据。

不过,同样,只有几个级别,我会立即构建这个东西的树形结构。它会更容易维护,并且只要您最终不必在树上爬上几个级别,您就不应该遇到任何性能问题(假设良好的索引、良好的查询等)

希望这有帮助。

关于MySQL 子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23619899/

相关文章:

php - 模态弹出窗口中的文本框未获取由更新单击触发的国家/地区值?

mysql - 我如何从 Laravel 中的表中获取本周的计数数据

sql - 使用 SQL Profiler 分析 Entity Framework 查询

Java EE 企业应用程序 : perform some action on deploy/startup

mysql - 从一张表中选择 : single-row subquery returns more than one row

php - 如何使用 php 更新 mysql 数据库中的连续行?

database - 存储和检索多个头像图像尺寸

sql - 更改SQL Server 2012系统排序规则

entity - 带有 Eq 的 Yesod/Persistent 字段

mysql - 导入sql文件时出错