如何用php设计一个数据库来实现网站的导航效果?
因此,我正在尝试建立一个网站,在其中我将有不同的Youtube视频组织在播放列表中。我想要一个页面来显示我按类别分组的播放列表,一个观看页面来观看带有“上一个”和“下一个”按钮的视频。我正在使用PHP和MySql。我总是沉迷于数据库和表关系;所以我对此一无所知。因此,我的问题是: 首先,组织我的视频的最佳方式是什么?我希望我的链接类似于watch.php?playlist=如何用php设计一个数据库来实现网站的导航效果?,php,mysql,database-design,Php,Mysql,Database Design,因此,我正在尝试建立一个网站,在其中我将有不同的Youtube视频组织在播放列表中。我想要一个页面来显示我按类别分组的播放列表,一个观看页面来观看带有“上一个”和“下一个”按钮的视频。我正在使用PHP和MySql。我总是沉迷于数据库和表关系;所以我对此一无所知。因此,我的问题是: 首先,组织我的视频的最佳方式是什么?我希望我的链接类似于watch.php?playlist=n&video=n,其中video=1将始终是相应播放列表上的第一个视频。现在我有一个playlist表,其中有playli
n
&video=n
,其中video=1将始终是相应播放列表上的第一个视频。现在我有一个playlist
表,其中有playlist\u id(PK)
playlist\u name
和category
列。然后我为每个特定的播放列表创建了一个表,其中的列是:video\u id(PK)
playlist id(FK-ref playlist.playlist\u id)
video\u name
和url
。我在那里的方向对吗
我的第二个问题是:在数据库中存储Youtube视频URL是一个好主意吗?如果没有,最好的方法是什么
最后但并非最不重要的是,实现我想要的导航效果的最佳方式是什么(从当前显示的视频链接到上一个和下一个视频)?我知道我必须使用_getand _POST方法来解决这个问题,我相信我能够解决这个问题,但如果你知道一个很好的解释方法,我将非常感谢你回答第一个问题:
您可能需要研究许多有用的数据库结构模式
邻接表
最简单、最直观的方法之一是邻接列表(1:M):
上述方法的缺点是无法将一个视频分配给多个播放列表——除非您接受这样一个事实,即一个视频记录可以有不同的video\u id
s,但可以有相同的youtube\u id
(将相同的视频插入表两次,以便将其与两个播放列表关联)
连接表
另一个经典的数据库设计模式是连接表(M:N),它意味着创建一个单独的表,将播放列表id与视频id关联起来。这允许您在视频表中只插入一次视频,并将其与多个播放列表关联
祖先表
如果需要创建层次结构,例如播放列表类别,其中包含最终包含播放列表的子类别,则可以通过存储每一级关系“父/祖/祖-级-n”来使用祖先表(类似于连接表)
分类:
另一种方法是分类模式,您可以在其中构建各种类型的分类。例如,如果要将播放列表组织为类别,其中包含包含播放列表(视频附加到其中)的子类别
您可能需要创建一个分类法
表来存储类别记录或播放列表记录
关于第二个问题:
在数据库中存储YouTube视频URL是非常好的。许多CMS平台将链接和/或整个嵌入片段作为varchar
或text
保存在数据库中
因为你知道你只想要YouTube视频,你可以利用这一点,只从YouTube URL中提取相关内容,从而在数据库中存储更少的数据
网址:www.youtube.com/watch?v=VIDEOID&list=LISTID
您可以先获取查询字符串,然后分别获取v
和list
参数
如果以上建议适合您的使用案例(您确信youtube是并且将永远是您最重要/唯一的提供商),您可以删除
播放列表id
和视频id
,并使用每个表中的youtube id
作为主键(它们足够短,你可以很好地索引它们,你可以对它们设置唯一的约束等等。)当你说“导航效果”时,你的意思是过渡吗?征求完整的设计建议有点过分。我们在这里帮助彼此理解各种较小的问题,然后我们利用我们的推理和以前的经验来构建东西。试着看看开放源代码平台的设计/结构,找到最常见的方法,并决定它们是否适合您的需要,进行调整&改进它们,当出现特定问题时,我们可以使其发挥作用。否则,我们将以我们的知识在这里,您将以您的需求在那里,您将根据人们的要求提供信息。在设计/构建时,大局比小细节更重要,因此您确实无法“线控设计”.依我看,这个“简单”案例的表格结构应该很好。如果您想了解更多信息,请阅读:谢谢您的帮助。我非常感谢
CREATE TABLE `playlist` (
`playlist_id` INTEGER NOT NULL AUTO_INCREMENT,
`youtube_id` VARCHAR(255) NOT NULL; DEFAULT '',
-- other necessary fields pertaining to a playlist
PRIMARY KEY(`playlist_id`),
KEY(`youtube_id`)
);
CREATE TABLE `video` (
`video_id` INTEGER NOT NULL AUTO_INCREMENT,
`youtube_id` VARCHAR(255) NOT NULL; DEFAULT '',
-- other necessary fields pertaining to a video
PRIMARY KEY(`video_id`),
KEY(`youtube_id`)
);