sql数据库的索引和表关系

时间:2014-09-12 17:05:42

标签: sql database database-design relational-database database-schema

我真的很感激如何设置我的表设计以及我应该使用什么类型的索引。

我认为这种要求已经提出了很多,希望我能从你的建议中受益!

要求,我的初步计划如下:

我有一张表格,用于识别有限数量的表格

FormID FormName Desc etc..

我将有第二个表填充这些表单的信息。 (EquipmentIds是唯一的。因此,一件设备可能需要上表中的一种形式。)

ID  FormID  EquipmentID  Element       Value 
-----------------------------------------------------
 1   25     3432         lightswitch   GE Lightbulb
 2   25     3432         lamp          nice lamp
 3   25     3432         rug           really ties the room together
 4   25     3432         shelf         good shelf
 5   25     3432         ...           ....
 6   23     2314         ...           ....

因此,表单的所有信息基本上都在第二个表中。要填充表单,我将从FormID AND EquipmentID上的表单填充中选择。

有更好的方法吗?这对我来说很有意义,但我可以看到表格增长得非常快,我想知道将第二张表编入索引的最佳方法是什么。

非常感谢你的时间和帮助

1 个答案:

答案 0 :(得分:0)

您正在实施Entity-Attribute-Value设计的变体。我曾多次写过,这不是关系数据库的有效设计。

  • 您无法正确使用SQL数据类型。
  • 您将失去使用UNIQUE,FOREIGN KEY甚至NOT NULL等SQL约束的能力。
  • 对EAV数据的查询不能很好地扩展。
  • 存储空间庞大且效率低下。它不仅创建了许多行,而且前三列在值中有很多重复,使索引的效率降低。
  • 要使用EAV数据,您必须编写更多应用程序代码来检查数据类型,模拟约束和重新格式化结果集。这是RDBMS已经为您更有效地完成的额外工作。

关系数据库的正确设计是为每个表单设计一个表,表单字段位于不同的列中,因此您可以适当地选择列名,数据类型和约束。允许多个值的表单字段也需要单独的子表。