mysql表结构建议?

Gor*_*don 8 mysql entity-attribute-value

这个表对mysql有什么好处吗?我希望将来能够灵活地使用这种类型的数据存储.使用此表结构,您不能使用PRIMARY KEY而是索引...

我应该更改表格的格式以包含标题 - 主键,宽度,长度,空格,耦合......

ID_NUM  Param   Value
1   Width   5e-081
1   Length  12
1   Space   5e-084
1   Coupling    1.511
1   Metal Layer     M3-0
2   Width   5e-082
2   Length  1.38e-061
2   Space   5e-081
2   Coupling    1.5
2   Metal Layer     M310
Run Code Online (Sandbox Code Playgroud)

Bil*_*win 11

不,这对于关系数据库来说是一个糟糕的设计.这是实体 - 属性 - 值设计的一个示例.它很灵活,但它打破了关键数据库的大部分规则.

在您作为灵活数据库的解决方案进入EAV设计之前,请阅读以下故事:Bad CaRMa.

更具体地说,EAV的一些问题包括:

  • 您不知道任何给定ID_NUM存在哪些属性而不查询它们.
  • 您不能强制使用任何属性,相当于NOT NULL.
  • 您不能使用数据库约束.
  • 您不能使用SQL数据类型; 该value列必须是长VARCHAR.
  • 特别是在MySQL中,每个VARCHAR都存储在自己的数据页面上,因此这非常浪费.

使用EAV设计时,查询也非常复杂.Magento是一个开源电子商务平台,广泛使用EAV,许多用户表示,如果您需要自定义报告,则查询速度非常慢且难以查询.

要成为关系型,您应该将每个不同的属性存储在自己的列中,并使用自己的名称和相应的数据类型.

我在演示文稿中的实用面向对象模型和我的博客文章EAV FAIL以及我的书" SQL Antipatterns:避免数据库编程的陷阱"中写了更多关于EAV的文章.