database - 简单的数据库设计 - 一些列有多个值
问题描述
警告:数据库设计/建模非常新,所以请耐心等待:)
我正在尝试设计一个简单的数据库,将有关图像的信息存储在档案中。除了file_name
(这是一个不同的字符串)之外,我还有类似的字段genre
,starring
每个字段可能包含多个字符串(如果图像与多种类型相关联,和/或图像中有多个演员)。
现在数据库只是一个以 为键的表,并且像和一样file_name
的字段只存储了多个逗号分隔的值。我可以使用通配符和和运算符很好地查询它,但我想知道是否有更优雅的方式来分解数据,以便更容易使用/查询。例如,我希望能够找到档案中有多少独特的演员,但我认为当前模型不可能做到这一点。starring
genre
like
in
我意识到这是一个关于数据建模的非常基本的问题,但是任何人都可以提供或阅读您可以指导我的任何指导将不胜感激!
谢谢!
解决方案
您需要创建额外的表才能坚持规范化。在您的情况下,您需要 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
推荐阅读
- javascript - 用于Mozilla的React Js文本输入光标位置
- c - 如何在 c 的 printf() 函数中使用字符串变量?
- javascript - 如何使用脚本编辑器在谷歌工作表中选择整行并以不同颜色突出显示?
- javascript - 基于 PHP 的大型数据集表单自动完成
- c# - 我们可以使用 2 个同名的 Func 吗?编译器不会抛出任何错误
- mysql - 有没有办法强制至少一列 NOT NULL
- azure - 无法通过 Azure Devops 发布管道执行 selenium 测试用例
- c - 错误:无效使用未指定边界的数组 - 包括解决方案,需要澄清
- reactjs - 基于枚举值的可选属性
- python - 为什么`decimal.Decimal`仍然给出舍入错误?