0

我想知道在相关数据库列之间创建连接的最佳方法是什么 - 在查询中或使用Index?我知道使用的主要问题Index是性能速度,我认为这不是问题。

表中的每一列代表各种产品属性,并且许多列直接连接到其他一些列(通常为 2 - 3 列),其中一种方式是:

  1. 相同属性的替代数据类型(即颜色名称 + 显示的 hex#,或图像名称 + .png 文件名 + alt 值)。这些列中的值表示相同的信息,但格式不同,因此值之间存在直接相关性,但值本身并不相同。

  2. 用于对列中的值进行分类的子集。相同的值存在于多个列中(具有父/子或兄弟关系)。 例如,“Colors All”列细分为 5 列,表示不同类型的颜色(即 Dark、Light、Bright 等),其中大部分组进一步细分为 3 个类别(按暗度等排序) .)。海军颜色分为 3 列 - “颜色全部”、“深色”和“宝石色调”。

过去我只用来Index创建表之间的关系(使用外键),但似乎这可能使我不必每次都创建连接它们的语句。

目前我正在使用带有 PDO 提取语句的 mySql(但我可能会在接下来的 12 个月内切换数据库)

4

1 回答 1

1

我应该首先澄清查询和索引不是彼此的替代品。

创建表时,会定义列,其中一些列可以定义为 FOREIGN KEYS,与另一个表中的其他列相关。表之间的关系仅用于参照完整性目的(如果引擎支持)。它对于文档目的也很有用,一些查询设计者使用它们来猜测查询中的连接。

索引(或索引)用于不同的目的。他们告诉数据库创建一个额外的数据结构,服务器可以根据索引列的值加速行的检索。

因此,外键定义表之间的关系,查询连接相关表,索引加速查询中的连接、过滤、分组和排序操作。

编辑:表格用于表示一种实体。因此,我们可以有一个具有两个属性的颜色表:colors(color_name, color_value)。Color_value 可以是十六进制字符串或整数表示。原则上,我们不会有格式为 rgb(x,y,z) 的颜色代码列,因为这总是可以从第一个开始计算的。

我们将有另一个表来保存图像列表。但是,颜色表和图像表之间没有关系。

编辑 2:第二种类型通常用两个表格表示。第一个表存储典型的层次关系,第二个表告诉每个颜色标记的类。因此,您提供的示例的关系模型将是:

colors(colorid, color_name, color_value)
color_classes(classid, classname, parentid)
colors_classes(colorid, classid)

e.g.,
(colorid, color_name, color_value) - colors
(1,       'Navy',     'xxx')

(classid, classname,    parentid) - color_classes
(1,      'All colors',    0)
(2,      'Dark colors',   1)
(3,      'Light colors',  1)
(4,      'Jewel Tones',   2) -- assuming Jewel Tones is a subdivision of Dark Colors

(colorid, classid) - colors_classes
(1,       4)       -- assuming Jewel Tones is a subdivision of Dark Colors

您还应该知道,递归关系(如在 color_classes 中)在关系模型中没有得到很好的处理,但它们仍然很常见,并且有解决方案来处理它。

最后,我不确定关系模型是否确实最适合您的问题。这将取决于您想要对数据进行的用途。

于 2013-04-16T17:37:21.353 回答