Mysql 创建电视节目数据库的方法

Mysql 创建电视节目数据库的方法,mysql,mysql-management,Mysql,Mysql Management,这是我向stackoverflow提出的第一个问题,因此如果我做错了什么,请让我知道我会尽快修复它 因此,我正在尝试建立一个电视节目数据库,我想知道最好的方法,并使我目前的数据库更简单(规范化) 我希望能够有以下结构或类似结构 Fringe Season 1 Episodes 1 - 10(whatever there are) Season 2 Episodes 1 - 10(whatever th

这是我向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_列表、tvshow_剧集、tvshow_链接)

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

我确信有一种更简单的方法可以做到这一点

提前感谢您的帮助,

Krishanthan Lingeswaran

标准化的基本概念是,您应该只存储您拥有的任何数据项的一个副本。看来你已经有了一个好的开始

这里有两种基本的方法来模拟你想做的事情,一种是插曲,另一种是节目。在数据库世界中,我们可能听说过术语“一对多”或“多对多”。两者都是有用的,只是取决于你的具体情况,知道哪一个是正确的使用。在你的情况下,你要问自己的一个大问题是,一集是只能属于一个节目,还是一集可以同时属于多个节目?我将解释这两种形式,以及为什么你需要知道这个问题的答案

第一种形式只是外键关系。如果您有两个表,即“剧集”和“剧集”,在剧集表中,您将有一个名为“show_id”的列,其中包含一个(并且只有一个!)剧集的id。你能想象这样你怎么就不会有一集属于一个以上的节目了吗?这被称为“一对多”关系,即一个节目可以有多个插曲

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

使用第一种形式有一些好处,但在大多数情况下,这并不是什么大问题。您的查询会稍微短一点,因为您只需连接两个表即可获得剧集->节目,而另一个表只是多了一个连接。这实际上归结为你是否需要一对多或多对多的关系

一个例子是,如果你正在为一个图书馆建模,并且必须跟踪谁签出了哪本书,那么你需要一个多对多关系。您将有一个图书表,一个用户表,然后是一个“图书到用户”表,该表将有一个id、一个图书id和一个用户id,并且将是一个多对多关系

希望有帮助

我确信有一种更简单的方法可以做到这一点

据我所知不是这样。您的模式接近于您所能实现的最简单的功能,我认为这就是您所要求的功能。“改进”只会让事情变得更复杂,当你判断自己的需求出现时,应该加上“改进”。下面的例子浮现在脑海中(没有一个能真正简化您的模式)

  • 我将标准化您的外键和主键名称。一个例子是列
    shows.id、scents.id、scents.show\u id、link.id、link.scention\u id
  • 在我看来,将
    seasenum
    作为我假定的将是一个
    int
    放在剧集表中,违反了规范化约束。这不是一个主要的违规行为,但如果你真的想坚持下去,我会创建一个单独的季节表,并将其多对一关联到Shows表,然后让剧集只与季节关联。例如,这使您有机会将信息附加到每个季节。此外,它还可以防止信息的重复(虽然剧集表中季节ID外键列的类型表面上仍然是INT,但外键从理论上存储了一个关联,即您想要什么,而不是哑数据,即您拥有什么)
  • 你可以考虑把语言、导演和公司放在他们自己的桌子上而不是你的电视节目列表中。这与上述问题相同,在您的案例中,这是对规范化的轻微违反
  • 语言、董事和公司都有与协会级别相关的有趣问题。大多数电视节目的不同剧集都有不同的导演。许多是由多个不同的公司,有时是网络,以多种语言制作的。那么,您计划在什么级别存储这些信息呢?我不是一个软件架构师,所以其他人可以比我更好地回答这个问题,但我已经为语言、导演和公司建立了一个多态多对多关联,并建立了一个继承模型,允许在一集一集、一季一季或一剧一剧的基础上指定这些值,如果未提供值,则从其父级继承该值
关于所有这些建议的底线:选择适合您项目的内容。如果您不需要这个级别的关联所提供的功能,并且不介意手动输入重复数据(您可能最终实现了一个自动完成系统来帮助您),那么您可以忽略一些规范化约束


正常化只是一个建议。选择最适合自己的,从错误中吸取教训。

另一张包含公司和董事名单的表格的结构是什么?tvshow|u link table是做什么的?@YWE:我想这是因为O0kri0o想把用户链接到他们可以在线观看或购买该集的地方。Directors table是:Dir|ID | D|u FirstName | D|u LastName Companies table是:Comp|ID | Comp|u Name。tvshow_链接用于指向其他网站的链接以供预览和查看
    //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