简单的数据库设计——一些列有多个值

Simple database design - some columns have multiple values

警告:对数据库非常陌生 design/modeling,请耐心等待 :)

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

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

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

谢谢!

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

表格:

图片(id, file_name)

类型(id, name)

image_genres(image_id, genre_id)

stars(id, name, ...)

image_stars(image_id, star_id)

以及 table 中的一些数据:

图片table

id file_name
1 /users/home/song/empire.png
2 /users/home/song/promiscuous.png

流派table

id name
1 pop
2 blues
3 rock

image_genres table

image_id genre_id
1 2
1 3
2 1

星数table

id name
1 Jay-Z
2 Alicia Keys
3 Nelly Furtado
4 Timbaland

image_stars table

image_id star_id
1 1
1 2
2 3
2 4

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

SELECT COUNT(name) FROM stars