mysql - 如何设计一个将多列合并为一个的数据库?
问题描述
我有一个管网站,其中一个选项是选择视频可以进入的类别。上传者可以决定选择所有 94 个类别。我目前的设计有 94 列(加上其他列),每个类别一个。有没有办法可以将所有 94 个组合成一列categories
而不是this cat 1
,this cat 2
等,然后可能会内爆插入?
我正在阅读另一个 Stack Overflow 问题,建议为每个问题添加新行,但我认为一个视频上传有 94 行是相当多余的吗?
解决方案
我同意其他 Stack Overflow 问题的建议(您没有引用)。考虑只为您的表维护三列:
CREATE TABLE video_categories (
video_id INT NOT NULL PRIMARY KEY,
user_id INT NOT NULL,
category_id INT NOT NULL
)
也就是说,每条记录存储一个用户投票,每个视频,每个类别。这是一个相当规范的设计,让您不必尝试维护 94 个不同的列。当前设计中的一个明显缺陷是,如果添加新类别,您将被迫更改基础表设计。理想情况下,新传入数据不应破坏您的表格设计。
我上面提出的建议使查询数据变得相当容易。例如,要查找从包含三个或更多类别的用户那里获得评分的视频数量,我们可以尝试:
SELECT COUNT(DISTINCT video_id)
FROM
(
SELECT video_id
FROM video_categories
GROUP BY video_id, user_id
HAVING COUNT(*) >= 3
) t;
虽然上面的查询可能看起来很复杂,但对分布在 94 列中的类别执行相同的操作会复杂得多(并且难以维护)。
推荐阅读
- python - 在 setup.py 中更新命令名称后,模块导入失败
- dataset - MPII 姿态估计数据集:可见性标志不存在
- json - 在 Jasonette 中搜索文本
- sql - 如何使用 Next / Previous 导航 SQL 记录
- rust - 如何将许多参数传递给 rust actix_web 路由
- flutter - 深入查询firestore 2子集合
- hololens - 是否可以将我的台式电脑的网络摄像头与 hololens 2 模拟器一起使用?
- html - 评论框,让评论自动填充左边空白
- python - python - 在值的查询集中更改字典键
- python - Python 将每月和分钟数据帧与 TZ 感知的日期时间索引相结合