如何用php设计一个数据库来实现网站的导航效果?

如何用php设计一个数据库来实现网站的导航效果?,php,mysql,database-design,Php,Mysql,Database Design,因此,我正在尝试建立一个网站,在其中我将有不同的Youtube视频组织在播放列表中。我想要一个页面来显示我按类别分组的播放列表,一个观看页面来观看带有“上一个”和“下一个”按钮的视频。我正在使用PHP和MySql。我总是沉迷于数据库和表关系;所以我对此一无所知。因此,我的问题是: 首先,组织我的视频的最佳方式是什么?我希望我的链接类似于watch.php?playlist=n&video=n,其中video=1将始终是相应播放列表上的第一个视频。现在我有一个playlist表,其中有playli

因此,我正在尝试建立一个网站,在其中我将有不同的Youtube视频组织在播放列表中。我想要一个页面来显示我按类别分组的播放列表,一个观看页面来观看带有“上一个”和“下一个”按钮的视频。我正在使用PHP和MySql。我总是沉迷于数据库和表关系;所以我对此一无所知。因此,我的问题是:

首先,组织我的视频的最佳方式是什么?我希望我的链接类似于watch.php?playlist=
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`)
);