Php 基于播放列表的视频数据库设计
我上一节数据库课已经有一段时间了,我对PHP/MySQL应用程序的以下基本数据库设计有一些疑问,该应用程序是一个带有播放列表的视频数据库:Php 基于播放列表的视频数据库设计,php,mysql,database,database-design,relational-database,Php,Mysql,Database,Database Design,Relational Database,我上一节数据库课已经有一段时间了,我对PHP/MySQL应用程序的以下基本数据库设计有一些疑问,该应用程序是一个带有播放列表的视频数据库: t_playlists p_id (PK) | name | description t_videos v_id (PK) | name | description | playcount t_mapping v_id (FK) | p_id (FK) 我要执行的查询如下: 获取所有播放列表-包括每个播放列表中的视频数量,但不包括视频本身 给定p\u
t_playlists
p_id (PK) | name | description
t_videos
v_id (PK) | name | description | playcount
t_mapping
v_id (FK) | p_id (FK)
我要执行的查询如下:
- 获取所有播放列表-包括每个播放列表中的视频数量,但不包括视频本身
- 给定
,获取该播放列表中的所有视频p\u id
- 给定
,获取此视频所属的播放列表v_id
t\u视频
中,使用一个单独的映射表比将p\u id
作为另一列(FK)包含“更好”是什么?这难道不会让我的问题简单得多吗SELECT "name", description, (SELECT COUNT(*) FROM t_videos WHERE fk_p_id = p_id) AS VideoCount FROM t_playlists
它将在名为VideoCount的列中显示每个播放列表的计数
SELECT * FROM t_videos WHERE fk_p_id = given_p_id
(如果要删除映射表并将p_id包含在视频表中,则需要执行此操作。)
SELECT * FROM t_playlists
INNER JOIN t_videos
ON t_playlists.p_id = t_videos.fk_p_id
WHERE v_id = given_v_id
请注意,为了简单起见,我使用*而不是列名,但是您应该只包含希望显示的列名
编辑:这都是假设你有一对多,这就是你所说的。在我看来,这种关系应该是多对多。对于问题1,问问你自己,你是希望一个视频只添加到一个播放列表中还是添加到多个播放列表中,你就会得到答案。啊,是的,我记得。所以如果我想
1
video to被添加到n
播放列表中,那么我必须使用映射表,对吧!?我是否使用映射表对效率有多大影响?我想一个播放列表就足够了,如果它能大大提高查询的效率!?它通常被称为连接表,我真的不明白你是怎么想的否则,可以将1个视频添加到n个播放列表中。从效率角度来看,如果1个视频=1个播放列表,则比1个视频=n个播放列表快,因为您只对1个视频执行1次查找。映射表的另一种替代方法是:如果我知道1
视频最多属于3
播放列表,那么我可以在