简单的数据库设计——一些列有多个值
Simple database design - some columns have multiple values
警告:对数据库非常陌生 design/modeling,请耐心等待 :)
我正在尝试设计一个简单的数据库,用于将有关图像的信息存储在存档中。除了 file_name
(这是一个不同的字符串),我还有像 genre
和 starring
这样的字段,其中每个字段可能包含多个字符串(如果图像与多种类型相关联,and/or 如果图像中有多个演员)。
现在数据库只有一个 table 键控 file_name
,starring
和 genre
等字段只存储了多个逗号分隔值。我可以使用通配符和 like
和 in
运算符很好地查询它,但我想知道是否有更优雅的方法来分解数据,以便更容易 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
警告:对数据库非常陌生 design/modeling,请耐心等待 :)
我正在尝试设计一个简单的数据库,用于将有关图像的信息存储在存档中。除了 file_name
(这是一个不同的字符串),我还有像 genre
和 starring
这样的字段,其中每个字段可能包含多个字符串(如果图像与多种类型相关联,and/or 如果图像中有多个演员)。
现在数据库只有一个 table 键控 file_name
,starring
和 genre
等字段只存储了多个逗号分隔值。我可以使用通配符和 like
和 in
运算符很好地查询它,但我想知道是否有更优雅的方法来分解数据,以便更容易 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