【问题标题】:How to design a database to achieve navigation effect in a website with php?如何用php设计数据库实现网站导航效果?
【发布时间】:2013-12-14 05:14:59
【问题描述】:

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

首先,组织我的视频的最佳方式是什么?我希望我的链接类似于 watch.php?playlist=n&video=n,其中 video=1 将始终是相应播放列表中的第一个视频。现在我有一个playlist 表,其中包含playlist_id(PK)playlist_namecategory 列。然后我为每个特定的播放列表都有一个表格,这些列是:video_id(PK)playlist id(FK ref playlist.playlist_id)video_nameurl。我的方向正确吗?

我的第二个问题是:将 Youtube 视频网址存储在数据库中是否是个好主意?如果没有,最好的方法是什么?

最后但同样重要的是,实现我想要的导航效果的最佳方式是什么(从当前显示的视频链接到上一个和下一个视频)?我知道我必须为此使用 _GET 和 _POST 方法,我相信我能够弄明白,但如果你知道一个很好的方法来解释这一点,我将不胜感激

【问题讨论】:

  • 当您说“导航效果”时,您是指过渡吗?
  • 寻求完整的设计建议有点过分。我们在这里帮助彼此理解各种较小的问题,然后我们利用我们的推理和以前​​的经验来构建东西。
  • 尝试查看开源平台的设计/结构并找到最常见的方法,并确定它们是否符合您的需求,调整和改进它们,当出现特定问题时,我们可以使其发挥作用。
  • 否则,我们以我们的知识在这里,您根据您的要求在那里,您正在根据人们的要求提供信息。在设计/构建大图比小细节更重要,所以你真的不能“有线设计”。
  • 在我看来,这种“简单”案例的表结构应该没问题。如果您想了解更多信息,可以阅读:en.wikipedia.org/wiki/Database_normalization

标签: php mysql database-design


【解决方案1】:

关于你的第一个问题:

您可能想研究许多有用的数据库结构模式。

邻接列表

其中一个最简单、最直观的就是邻接表(1:M):

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`)
);

上述方法的唯一缺点是无法将视频分配给多个播放列表 - 除非您接受视频记录可以有不同的video_ids 但相同的youtube_id 的事实(您插入相同的视频两次进入表格,以便将其与 2 个播放列表相关联)。

连接表

另一种经典的数据库设计模式是联结表 (M:N),这意味着创建一个将playlist_idvideo_id 关联的单独表。这允许您在视频表中仅插入一次视频并将其关联到多个播放列表。

祖先表

如果您需要创建层次结构,例如具有最终具有播放列表的子类别的播放列表类别,您可以通过存储每个级别的关系“parent/grandparent/ancestor-level-n”来使用祖先表(类似于联结表) ”。

分类法:

另一种方法是分类模式,您可以在其中构建各种类型的分类。例如,如果您想将播放列表组织为包含子类别的类别,这些子类别包含播放列表(附加视频)。

您可能希望创建一个taxonomy 表来存储类别记录或播放列表记录。

关于第二个问题:

在数据库中存储 YouTube 视频 URL 非常好。许多 CMS 平台在数据库中保留链接和/或整个嵌入 sn-ps 为 varchartext

由于您知道自己只想要 YouTube 视频,因此您可以利用这一点并通过仅从 YouTube URL 中提取相关内容来在数据库中存储更少的数据。

网址:www.youtube.com/watch?v=VIDEOID&list=LISTID

您可以parse_url获取查询字符串,然后parse_query分别获取vlist参数。

如果上述建议对您的用例有好处(您确定 youtube 是并且将永远是您最重要/唯一的提供者)您可以删除 playlist_idvideo_id 并使用每个 youtube_id表作为主键(它们足够短,你可以很好地索引它们,你可以对它们设置唯一约束等)。

【讨论】:

  • 感谢您的帮助。我真的很感激
猜你喜欢
  • 2011-03-09
  • 2011-03-26
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
相关资源
最近更新 更多