【问题标题】:MySQL database design question - storing lists/arrays of indexesMySQL 数据库设计问题 - 存储索引列表/数组
【发布时间】:2011-09-27 17:32:00
【问题描述】:

我想知道如何为表中的每个 ID 存储 ID 索引列表。这些将有效地形成 ID 之间的“关系”。到目前为止,这是主表:

主表:

  • id、整数、主键

  • 名称,变量

  • text_info_1, varchar

  • text_info_2, varchar

现在对于每一行,都会有一些其他行的 ID 列表,这将告诉我一行与下一行的关系。例如,ID #5 的行可能与 ID 6、7、9、25 等相关。

以下是我考虑过的选项:

  1. 创建一个新列作为文本字段并存储这些整数值的序列化列表。然后在我想要它们的时候反序列化。

  2. 创建一个名为“relations”的新表,其中包含列relation_id(int 自动增量主键)、name1、name2 [以及指定关系类型的可选其他字段,这很好]。

我觉得选项 1 有点小题大做。我以前做过,它可以工作,但也许选项 2 是更好的设计?

不过我担心速度。使用选项 1,我可以从 main WHERE id = $id 执行 SELECT 关系,然后反序列化结果并让我的数组带有整数索引。但是对于选项 2,我将不得不浏览一个大很多倍(10 倍或更多)的表,然后执行“SELECT name1, name2 FROM 关系”。

速度是我的首要任务。我不确定哪个更适合太空,尽管我很想知道。

那么我应该选择哪个选项?还有其他我没有考虑过的好选择吗?我也很感激关于数据库设计的一些好的一般性指针!

非常感谢。

【问题讨论】:

    标签: mysql database arrays database-design


    【解决方案1】:

    第二个选项更好。如果您想在数据库设计方面做得更好,您应该阅读有关数据库规范化的内容。可悲的是,我使用的所有材料都不是英文的。这个wikipedia link 可能是一个开始。

    关系

    relation_id (int auto increment primary key)
    id_one (int)
    id_two (int)
    ...
    

    您存储的是 id,而不是在关系表中存储名称。

    【讨论】:

      猜你喜欢
      • 2012-01-17
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多