我有以下表格:
照片
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_id
和content_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类型,然后在获取数据时我会在这些表上执行连接吗?
请寻找实现良好数据库设计的最佳实践,因为似乎第一种方法在添加外键约束时会增加复杂性。
您可能还想知道我有更多不同类型的表格,例如问题,帖子等。
答案 0 :(得分:0)
关系模型不会存储content_id并在comments表中输入。注释表应仅包含依赖于注释的属性。您还没有显示这些表格是如何相关的。如果您有多个事件和照片共享的内容类型,我会有一个单独的表,域或内容类型的查找表。我不确定为什么time_created属性在contents表中。那个时候创造了什么?如果它是创建的照片,则time_created属于照片表。什么是content_type的一个例子?