多种内容类型的数据库设计

时间:2013-07-07 14:17:06

标签: database-design

我正在为我的新项目设计一个数据库。我想知道我的数据库设计是否正确,因为我不确定100%。

允许用户添加内容:图片,文字,网址。内容将在单页上列出,因此我认为创建单一内容类型将是最佳选择。

到目前为止,我有以下结构:

post
  - id
  - type ENUM
  - title
  - image NULL
  - text NULL
  - URL NULL

post_image
  - id
  - filesystem
  - filename

post_text
  - id
  - body

post_url
  - id
  - link

当然,我为post tabke和post_ *类型表创建了1:1关联。我在我的应用程序中使用Doctrine作为ORM。为了获取内容,我有一个自定义方法来检查类型并返回正确的内容(文本,URL或图像路径)。

这是你推荐的方法吗?

我心中有两种选择:

  • 在帖子表格中创建可为空的imagetexturl字段
  • 创建单个content字段

在使用上述两种方法时,我得到了非常简单和可操作的数据库结构,但这可能会在将来引起一些问题。

期待听到一些社区的声音。

最佳!

1 个答案:

答案 0 :(得分:1)

正如您在评论中所述,此数据库设计将为您提供很大的灵活性。它包括在一个帖子中使用多种类型的内容的可能性。如您所述,这将永远不会是一个已使用的功能,您可以决定根据您的需要更改您的数据库设计。如果你记住它或记录它,灵活性不太可能引起问题。

另一种设计就是像你说的那样创建一个单独的表。使用单个表有一个很大的缺点,因为它通常是空的。例如,假设您将所有内容放在一个名为“content”的表中。现在,当用户发布网址时,您将拥有一个数据库行,其中包含图像和文本的空值,这将占用更多空间。这种方法的一大优点是它非常容易访问(因为你只有1个表,它可能会导致简单的查询)。

第三种可能性是将post表实现到子项中。这将导致:

  • Post_image
  • POST_TEXT
  • POST_URL

使用此设计只允许您为帖子设置一种类型(因为您将为图像,文本或网址创建一行)。这种设计的一个缺点是你会有很多相同的列(特别是当你决定添加更多项目时)。