【问题标题】:Database design for multiple content types多种内容类型的数据库设计
【发布时间】:2013-07-07 14:17:05
【问题描述】:

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

允许用户添加内容:图像、文本、URL。内容将在单个页面上列出,因此我认为创建单个内容类型将是最佳选择。

到目前为止,我的结构如下:

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 或图像路径)。

这是您推荐的方法吗?

我有两个选择:

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

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

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

最好的!

【问题讨论】:

  • 这取决于很多事情,你期望什么样的使用(10个用户?100万?)。这种设计的一个优点是您可以在帖子中使用多种类型的内容。
  • @Floris Velleman - 用户?肯定不到一百万。永远不会改变的另一件事是每个帖子只能有单一类型的内容。我目前拥有的结构给了我更多的灵活性,我只是不确定它是否是最好的选择。感谢您的评论。

标签: database-design


【解决方案1】:

正如您在评论中所说,此数据库设计将为您提供很大的灵活性。它包括在一篇文章中使用多种类型的内容的可能性。正如您提到的,这永远不会是一个使用过的功能,您可以决定根据您的需要更改您的数据库设计。如果您牢记或记录灵活性,则不太可能导致问题。

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

第三种可能性是您将发布表实现到您的子项目中。这将导致:

  • Post_image
  • Post_text
  • Post_url

使用此设计将只允许您为帖子使用 1 种类型(因为您将为图像、文本或 url 创建一行)。这种设计的一个缺点是您将拥有许多相同的列(尤其是当您决定添加更多项目时)。

【讨论】:

    猜你喜欢
    • 2010-11-18
    • 2015-12-28
    • 2013-05-02
    • 1970-01-01
    • 2011-03-12
    • 2014-01-22
    • 2018-02-28
    • 2018-02-17
    • 1970-01-01
    相关资源
    最近更新 更多