如何设计关系数据库来处理多值属性?
修改:详细说明:
我有两种方法可以考虑这样做 -
问题是:
提前致谢
答案 0 :(得分:15)
在传统的关系数据库设计中,每一行&列必须只存储一个值。
不要存储以逗号分隔的列表或任何古怪的内容。
例如,运动队有七名成员。你可以这样做:
CREATE TABLE team (
team_id INT PRIMARY KEY,
team_name VARCHAR(50),
team_members VARCHAR(200)
);
INSERT INTO team VALUES (1,'Dwarfs', 'Sleepy,Dopey,Sneezy,Happy,Grumpy,Doc,Bashful')
但最好这样做:
CREATE TABLE team (
team_id INT PRIMARY KEY,
team_name VARCHAR(50),
);
INSERT INTO team (team_name) VALUES ('Dwarfs');
CREATE TABLE team_members (
team_id INT,
member_name VARCHAR(20),
FOREIGN KEY (team_id) REFERENCES team(team_id)
);
INSERT INTO team_members VALUES
(LAST_INSERT_ID(), 'Sleepy'),
(LAST_INSERT_ID(), 'Dopey'),
(LAST_INSERT_ID(), 'Sneezy'),
(LAST_INSERT_ID(), 'Happy'),
(LAST_INSERT_ID(), 'Grumpy'),
(LAST_INSERT_ID(), 'Doc'),
(LAST_INSERT_ID(), 'Bashful');
nb: LAST_INSERT_ID()
是一个MySQL函数。其他品牌的数据库也提供类似的解决方案。
答案 1 :(得分:1)
这种关系是一对多还是多对多?使用一对多关系,我建议引用父表(一个)的子表(众多)中的外键。通过多对多的关系,那么您最好的选择很可能是一个单独的表,其中包含父母和子女的外键。
答案 2 :(得分:1)
在这里阅读http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html关于第一(1NF),第二(2NF)和第三(3NF)正常形式的数据库设计。 3NF以上有更多的形式,但通常3NF就足够了。
答案 3 :(得分:1)
如果您只能使用严格的关系数据库,那么您需要将这些值存储为表中的行。这是你的问题 - 如何使用关系数据库。 但是,有许多可用的数据库可以在一个字段中提供多个值的本机存储,这对于许多真实世界的数据来说非常匹配,易于编程,并且更容易理解(没有表格的爆炸性增长)第3范式)。 有关详细信息,请参阅http://en.wikipedia.org/wiki/MultiValue http://en.wikipedia.org/wiki/IBM_U2 http://en.wikipedia.org/wiki/InterSystems
答案 4 :(得分:1)