首页 > 解决方案 > 简单的数据库设计 - 一些列有多个值

问题描述

警告:数据库设计/建模非常新,所以请耐心等待:)

我正在尝试设计一个简单的数据库,将有关图像的信息存储在档案中。除了file_name(这是一个不同的字符串)之外,我还有类似的字段genrestarring每个字段可能包含多个字符串(如果图像与多种类型相关联,和/或图像中有多个演员)。

现在数据库只是一个以 为键的表,并且像和一样file_name的字段只存储了多个逗号分隔的值。我可以使用通配符和和运算符很好地查询它,但我想知道是否有更优雅的方式来分解数据,以便更容易使用/查询。例如,我希望能够找到档案中有多少独特的演员,但我认为当前模型不可能做到这一点。starringgenrelikein

我意识到这是一个关于数据建模的非常基本的问题,但是任何人都可以提供或阅读您可以指导我的任何指导将不胜感激!

谢谢!

标签: databasesqlitedatabase-design

解决方案


您需要创建额外的表才能坚持规范化。在您的情况下,您需要 4 个额外的表来表示这些 n->m 关系(如果关系是 1->n,额外 2 个就足够了)。

表:

图像(id,文件名)

流派(id,名称)

image_genres(image_id,genre_id)

星星(id,名字,...)

image_stars (image_id, star_id)

以及表格中的一些数据:

图像表

ID 文件名
1 /users/home/song/empire.png
2 /users/home/song/promiscuous.png

流派表

ID 姓名
1 流行音乐
2 布鲁斯
3 岩石

image_genres 表

image_id 流派_id
1 2
1 3
2 1

星星表

ID 姓名
1 杰伊-Z
2 艾莉西亚凯斯
3 妮莉·费塔多
4 提姆巴兰

image_stars 表

image_id 星号
1 1
1 2
2 3
2 4

对于数据库中的唯一演员计数,您可以简单地运行下面的 sql 查询

SELECT COUNT(name) FROM stars

推荐阅读