【问题标题】:Indexing and table relationships for sql databasesql数据库的索引和表关系
【发布时间】:2014-09-12 17:05:42
【问题描述】:

我非常感谢有关如何设置我的表格设计以及我应该使用哪种类型的索引的一些建议。

我认为这种类型的要求以前出现过很多,所以希望我能从你的建议中受益!

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

我有一张表格可以识别有限数量的表格

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 和 EquipmentID 上的表单填充器中进行选择。

有没有更好的方法来做到这一点?这对我来说很有意义,但我可以看到表增长得非常快,我想知道索引第二个表的最佳方法是什么。

非常感谢您的宝贵时间和帮助

【问题讨论】:

  • 你能澄清一下你在用这些数据做什么吗?我质疑卡尔文先生对你所做事情的评估是否准确。因此,每个表单都有多个“元素”。你用这些做什么?这是什么意思?或许你可以举一个更完整的例子。

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


【解决方案1】:

您正在实现Entity-Attribute-Value 设计的变体。我曾多次写过,这对于关系数据库来说不是一个有效的设计。

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

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

【讨论】:

  • 非常感谢您的指导
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 2011-11-26
相关资源
最近更新 更多