数据库设计 – 数据库中的多值属性

如何设计关系数据库来处理多值属性

编辑:详细说明:

我有两种方法可以做到这一点 –

>尝试在字段中放置逗号分隔值,这看起来有点笨拙.
>为该字段创建另一个表,并让多个值转到该字段.如果我有太多这样的字段,这可能会导致非常多的表.

问题是:

>还有其他方法可以解决这个问题吗?
>以上两种方法中哪一种一般使用?

提前致谢

解决方法

在传统的关系数据库设计中,每一行和每一行都是列必须只存储一个值.

不要存储以逗号分隔的列表或任何古怪的东西.

例如,运动队有七名成员.你可以这样做:

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,);
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'),'Sneezy'),'Happy'),'Grumpy'),'Doc'),'Bashful');

nb:LAST_INSERT_ID()是一个MysqL函数.其他品牌的数据库也提供类似的解决方案.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...