构建不同内容类型的表?单个表,id指向完全具有不同内容表的不同表

时间:2017-07-22 21:44:42

标签: sql database

我有以下表格:

照片

    PHOTOS
    |____id
    |____user_id 
    |____url 
    |____time_uploaded 

事件

    EVENTS
    |____id 
    |____event
    |____start_time
    |____stop_time
    |____time_created 

评论

    COMMENTS
    |____id 
    |____comment,
    |____user_id 
    |____content_id <-------------| uniquely identifies
    |____content_type <-----------| content
    |____time_created 

照片和事件表共享评论表(即评论表包含照片和事件的行。因此,列content_id可能有两行具有相同的content_id但来自不同的表(即来自事件或照片)。为了区分它们,我添加了专栏content_type

最近我开始怀疑是否应该创建一个新表contents,该表只包含所有内容类型content_idcontent_type(无论是事件还是照片)。然后事件和照片将有自己独立的表格,然后将其连接到内容表格。通过这种方式,我可以拥有一个内容表,并且可以轻松地将一个外键约束添加到评论表中,因为我已从评论表中删除了content_type列,该列可能因事件和照片而异。 这是新表

内容(

    CONTENTS
    |____content_id 
    |____content_type,
    |____time_created

照片(

    PHOTOS
    |____content_id
    |____user_id 
    |____url

事件(

    EVENTS
    |____content_id
    |____event
    |____start_time 
    |____stop_time

评论(

 COMMENTS
 |____id 
 |____comment
 |____user_id 
 |____content_id <-------------| uniquely identifies content and type
 |____ :)        <-----------| content_type now removed
 |____time_created 

我是否应继续在照片和事件表格中加入content_type,例如我一直在做或应该继续创建一个contents表,其中包含这些不同内容的content_ids和content_type类型,然后在获取数据时我会在这些表上执行连接吗? 请寻找实现良好数据库设计的最佳实践,因为似乎第一种方法在添加外键约束时会增加复杂性。 您可能还想知道我有更多不同类型的表格,例如问题,帖子等。

这是表格之间的关系 Table relationship

1 个答案:

答案 0 :(得分:0)

关系模型不会存储content_id并在comments表中输入。注释表应仅包含依赖于注释的属性。您还没有显示这些表格是如何相关的。如果您有多个事件和照片共享的内容类型,我会有一个单独的表,域或内容类型的查找表。我不确定为什么time_created属性在contents表中。那个时候创造了什么?如果它是创建的照片,则time_created属于照片表。什么是content_type的一个例子?