这是我对stackoverflow的第一个问题,因此,如果我做错了什么,请告诉我,我将尽快修复它。

因此,我试图为电视节目制作数据库,我想知道最好的方法,并使当前数据库更简单(规范化)。

我将能够具有以下结构或类似结构。

    Fringe
        Season 1
            Episodes 1 - 10(whatever there are)
        Season 2
            Episodes 1 - 10(whatever there are)
        ... (so on)

    Burn Notice
        Season 1
            Episodes 1 - 10(whatever there are)
        Season 2
            Episodes 1 - 10(whatever there are)
        ... (so on)

    ... (More Tv Shows)


抱歉,如果不清楚。 (请要求澄清)

但是我现在的结构是3个表(tvshow_list,tvshow_episodes,tvshow_link)

    //tvshow_list//
    TvShow Name | Director | Company_Created | Language | TVDescription | tv_ID

    //tvshow_episodes//
    tv_ID | EpisodeNum | SeasonNum | EpTitle | EpDescription | Showdate | epid

    //tvshow_link//
    epid | ep_link


Director和公司通过ID链接到包含公司和董事列表的另一个表。

我很确定有一种更简化的方法。

我在这里先向您的帮助表示感谢,
克里山丹·林格斯瓦兰(Krishanthan Lingeswaran)

最佳答案

规范化的基本概念是您只应存储任何数据项的一个副本。看来您已经有了一个良好的开端。

您可以通过两种基本方式来模拟您要在此处执行的操作,包括剧集和节目。在数据库世界中,您可能听说过“一对多”或“多对多”一词。两者都是有用的,仅取决于您的具体情况,知道哪种才是正确的使用。在您的情况下,要问自己的一个大问题是,一个情节只能属于一个节目,还是一个情节可以一次属于多个节目?我将解释这两种形式,以及为什么您需要知道该问题的答案。

第一种形式只是外键关系。如果情节表中有两个表“ episodes”和“ shows”,则将有一个名为“ show_id”的列,其中包含一个(仅一个!)节目的ID。您能看到这样的情节永远不会属于多个节目吗?这被称为“一对多”关系,即一个节目可以有许多情节。

第二种形式是使用关联表,这是您在示例中使用的形式。这种形式允许您将一个情节与多个节目相关联,因此被称为“多对多”关系。

使用第一种形式有一些好处,但是在大多数情况下并没有什么大不了的。您的查询会短一些,因为您只需要联接2个表即可获得情节->节目,而另一个表仅是一个联接。实际上,要弄清楚您是否需要“一对多”或“多对多”类型的关系。

您需要建立多对多关系的情况的一个示例是,如果您正在建立图书馆模型并且必须跟踪谁签出了哪本书。您将有一个书本表,一个用户表,然后是一个“书给用户”表,该表将具有一个id,一个book_id和一个user_id,并且将是多对多关系。

希望有帮助!

08-28 11:38