SQL:当1个字段具有多个类别时如何设计数据库?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL:当1个字段具有多个类别时如何设计数据库?相关的知识,希望对你有一定的参考价值。

我正在尝试为漫画网站建立数据库。我计划有:表1:漫画(id,标题,genre_id,...)表2:流派(ID,名称,...)但是,每个漫画可以同时具有多种类型(浪漫,冒险等)。因此,如果按上述方式设置数据库,则必须为Table1中的1个漫画创建多行,这些行具有相同的其他信息(id,title,...),但具有不同的genre_id。这似乎是错误的...有更好的方法吗?

答案

您要关联junction表:

create table comic_genres (
    comic_genres id generated always as identity primary key,
    comic_id int references comics(comic_id),
    genre_id int references genres(genre_id)
);

您可以在表中包括其他信息,例如每行的创建日期。

另一答案

您可以创建称为流派的多对多关系表。

此流派表存储了漫画所属的所有流派。

一本漫画书可以是多种类型的一部分,而一类漫画可以是多种类型的漫画的一部分。这样,您可以使漫画书表保持规范化,而无需创建重复项。

Genre_mapping表示例:

comic_id genre_id 
1           1   
1           2
2           2
3           1
3           5
3           5

流派表:

genre_id genre_name
1           Comedy
2           Action
3           Romance
4           Adventure
5           Thriller

以上是关于SQL:当1个字段具有多个类别时如何设计数据库?的主要内容,如果未能解决你的问题,请参考以下文章

具有多个字段的 XML 路径的 SQL 东西

从具有类别和子类别的表中进行选择的 SQL 查询

如何在 SQL Server 中创建具有数十年的日期维度?

具有变体数据类型的 SQL 数据库设计 [关闭]

Sql Server 2005中当两个整型字段中一个为空时如何比较大小?

具有多个字段的类似 MongoDB 的语句