2012-02-20 104 views
1

我对数据库和SQL很陌生。我有一个任务,但我不知道如何解决这个问题。包含表行值数组的SQL列

比方说,我有表名为Persons。它有以下列:userId(主键),userNametags

Tags是另一张表,仅包含idtagName。人可以有多个标签,例如:“足球”,“烹饪”等。

每个标签对应于Tag表格行。但我不确定如何实现这种关系。我怎样才能做到这一点?

我猜它必须做一些外键和使人标记列的外键数组。

回答

8

您通常希望有一个关系表(这称为多对多关系,或M:M)。

Persons(id int, name varchar(40)...) 

Tags(id int, name varchar(40)....) 

PersonTags(id int, 
      personid FOREIGN KEY References Persons(id), 
      TagId FOREIGN KEY references Tags(id)) 

这种方式,您可以有或多或少的标签,只要你喜欢,但标签数据不存储在行的人。您可能会在一个字段中存储一系列值,但由于各种原因,这是一个非常糟糕的想法。

3

只是补充@ JNK的答案。 你可以使用ON DELETE CASCADE选项创建你的外键给人,这意味着当一个人被删除时,属于它的所有标签(PersonTags上的记录)也将被删除,但是TAG本身不会发生任何事情标签表