该表对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

最佳答案

不,对于关系数据库而言,这是一个糟糕的设计。这是Entity-Attribute-Value设计的示例。它很灵活,但是违反了关系数据库的大多数规则。

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

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

  • 如果不查询任何给定ID_NUM,您将不知道它们存在哪些属性。
  • 您不能使任何属性为强制性,等效于NOT NULL。
  • 您不能使用数据库约束。
  • 您不能使用SQL数据类型。 value列必须为长VARCHAR。
  • 特别是在MySQL中,每个VARCHAR存储在自己的数据页上,因此非常浪费。

  • 使用EAV设计时,查询也非常复杂。 Magento是一个开放源代码的电子商务平台,广泛使用EAV,许多用户表示,如果需要自定义报告,它非常缓慢且难以查询。

    为了保持联系,您应该将每个不同的属性存储在其自己的列中,并带有其自己的名称和适当的数据类型。

    我在演示文稿Practical Object-Oriented Models in SQL和博客文章EAV FAIL中以及在我的书SQL Antipatterns: Avoiding the Pitfalls of Database Programming中写了更多有关EAV的内容。

    关于mysql表结构建议?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8313090/

    10-13 06:22