2011-07-03 80 views
2

我想知道如何在表中存储每个ID的ID索引列表。这些将有效地在ID之间形成“关系”。这里的主表至今:MySQL数据库设计问题 - 存储列表/索引数组

表主:

  • ID,整数,主键

  • 名,VARCHAR

  • text_info_1,VARCHAR

  • text_info_2, varchar

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

这里是我考虑的选择:

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

  2. 用列relation_id(int auto increment primary key),name1,name2,[和可选的其他字段指定关系类型,这将是很好的]创建一个名为“关系”的新表。

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

虽然我很担心车速。使用选项1,我可以只做SELECT关系从主WHERE id = $ id,然后反序列化结果并使用整数索引来创建我的数组。但是对于选项2,我将不得不浏览一个会多次(10倍或更多)的表,然后执行“SELECT name1,name2 FROM relations”。

速度是我的首要任务。我不确定哪一个更适合太空,但我会很好奇的发现。

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

谢谢你一堆。

回答

0

第二种方法更好。如果你想在数据库设计中变得更好,你应该阅读关于数据库规范化。可悲的是,我用过的所有材料都不是英文的。这个wikipedia link 可能是一个开始。

关系

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

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