如何在SQL中正确存储数据列表?

时间:2013-12-08 00:27:23

标签: python mysql sql list serialization

我仍然围绕着SQL的一些基本概念。更多,所以我试图了解我如何连续管理数据列表。它有可能是不同长度的名称,所以我不知道如何为所有数据分别列。

['John','Bill','Henry','Roxanne']
['James','Sandy','May']

我可以将它存储为字符串,但我的直觉说这是一个坏主意。我可以序列化它,但这些列表可能包含数百个项目,我不知道它可以承受多大的压力。

我该如何有效地做到这一点?还有一个更重要的问题,我在哪里可以学习这样的概念?

更新

我希望连续存储的数据示例:

Matthew | 12-07-2013 | ['James','Sandy','May'] | matthew@whatever.com

2 个答案:

答案 0 :(得分:1)

创建一个包含两个(或更多)列的第二个表,其中一个(或全部除外)列标识您正在讨论的第一个表中的哪一行[*]。最后一列标识了马修列表中的名称。在这张表中为Matthew创建了3行:James,Sandy和May各一行。

当然可以将名称存储为一个大字符串字段,但如果您不确定数据库本身不需要将它们视为单独的实体,则不应该这样做。即使你现在有信心,你可能会在以后改变主意并且必须解决它。

  

一个更重要的问题,我在哪里可以学习这样的概念?

任何SQL教程都应该涵盖它。

[*]我无法告诉你如何做到这一点,因为我对你的数据知之甚少。也许“马修”唯一地标识了这一行(名字列表是马修的朋友)。也许“马修”加上约会(而且名单上的名字是Matthew当天与之会面的人)。也许什么都没做,你的第一个表需要一个合成主键,以便第二个表可以引用它。

答案 1 :(得分:1)

我过去所做的(并且不保证这是最有效的方法)是使用第二个表,并将其链接回原始表。

因此,而不是包含如下条目的单个表:

name    | date       | users                   | email
Matthew | 12-07-2013 | ['James','Sandy','May'] | matthew@whatever.com

您有两张桌子,一张包含您的主要信息:

name    | date       | email
Matthew | 12-07-2013 | matthew@whatever.com

和一个链接:

index   | name       | user
1       | Matthew    | James
2       | Matthew    | Sandy
3       | Matthew    | May

然后你可以根据需要加入。