Database 仅部分地以相同的方式获取记录结构

Database 仅部分地以相同的方式获取记录结构,database,database-design,logic,Database,Database Design,Logic,在浏览9gag.com时,我想到了一个想法(问题)。假设我想创建一个网站,用户可以在其中添加不同种类的条目。现在,每个条目都是不同的类型,需要不同的/附加的列 假设我们可以添加: youtube视频 需要引用作者姓名和姓氏的引用 需要额外游戏类别、描述、类型等的flash游戏 需要链接的图像 现在,以上所有内容都是条目,并且有一些共同的列(如id、add_date、add_user_id等)和一些不同/附加的列(例如:仅flash游戏需要说明或仅图像需要加上需要指定的_18列)。问题是,我应

在浏览9gag.com时,我想到了一个想法(问题)。假设我想创建一个网站,用户可以在其中添加不同种类的条目。现在,每个条目都是不同的类型,需要不同的/附加的列

假设我们可以添加:

  • youtube视频
  • 需要引用作者姓名和姓氏的引用
  • 需要额外游戏类别、描述、类型等的flash游戏
  • 需要链接的图像
现在,以上所有内容都是条目,并且有一些共同的列(如id、add_date、add_user_id等)和一些不同/附加的列(例如:仅flash游戏需要说明或仅图像需要加上需要指定的_18列)。问题是,我应该如何组织DB/代码,以便将上述所有条目控制在一起?我可能想订购它们,或者按添加日期等搜索条目

我想到的想法是:

  • 添加一个“type”列,该列指定它是什么条目,并添加所有可能的列,其中允许NULL用于与此特定类型列无关的列。但这太令人讨厌了。没有数据集成
  • 为额外的数据添加一些带有序列化数据的列,但这会使任何过滤变得非常困难
  • 为条目创建主(父)表,并为具体条目类型(其附加列/信息)创建单独的表。但在这里,我甚至不知道如何正确地选择数据,这也很糟糕

  • 那么,解决这个问题的最佳方法是什么呢?

    父表似乎是最好的选择

    // This is the parent table
    Entry
      ID PK
      Common fields
    
    Video
      ID PK
      EntryID FK
      Unique fields
    
    Game
      ID PK
      EntryID FK
      Unique fields
    
    ...
    
    查询的外观在很大程度上取决于查询的类型。例如,要在某个日期前订购所有游戏,查询将如下所示:

    SELECT *
    FROM Game
    JOIN Entry ON Game.EntryID = Entry.ID
    ORDER BY Entry.AddDate
    
    要按日期获取所有内容,将有点混乱。例如:

    SELECT *
    FROM Entry
    LEFT JOIN Game ON Game.EntryID = Entry.ID
    LEFT JOIN Video ON Video.EntryID = Entry.ID
    ...
    ORDER BY Entry.AddDate
    
    如果您想运行类似于上面的查询,我建议您为主键字段(即
    VideoID
    GameID
    )指定唯一的名称,这样您就可以轻松地识别正在处理的条目类型(例如,通过检查
    GameID不为NULL

    或者您可以在
    条目
    中添加
    类型
    字段