2010-11-13 280 views
1

我想知道如何规范化表是这样的:规范化表

field1|field2|field3 
text1 |txt2 | 1,2,5 
other1|other2| 1,8,7 

FIELD1会重复很多次,场2是唯一的(不重复),现场3 - 用户ID。 像最喜欢的东西。

+0

我不清楚你的意图。也许是一个更真实的例子? – Randy 2010-11-13 14:54:58

回答

3

为此表提供一个主键,并使用field3 +此键创建一个新键。

表(你是变形后原始表)

field1 | field2 | fID 
... | ... | 1 
... | ... | 2 

收藏表:

fID | field3 
1 | 1 
1 | 2 
1 | 5 
2 | 1 
... | ... 

选择数据

您可以使用JOIN或只是一个在哪里得到结果。比方说,

SELECT field3 FROM Favorites WHERE fID = 1 

得到

1,2,5 

所以,如果我没看错你的问题是关系到主细节/亲子模式。

资源

3

首先,如果字段2是唯一的,那么它应该被声明作为主键(或者,至少是一个独特的指数)。其次,在field3中有多个值的事实告诉你,field3应该成为一个单独的表,它使用某个唯一值(我们刚才确定是field2)将其链接回第一个表(相关)。

所以,你的数据库创建脚本应该是这样的:

CREATE TABLE MainTable (field2 VARCHAR NOT NULL PRIMARY KEY, field1 VARCHAR) 

CREATE TABLE OtherTable (field2 VARCHAR REFERENCES MainTable, field3 INTEGER) 

你也可以考虑增加一个独立的主键值第二个值或使场2和场3一起主键。