0

我正在为我的新项目设计一个数据库。我想知道我的数据库设计是否正确,因为我不确定 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 表中创建 nullableimage和字段texturl
  • 创建单个content字段

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

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

最好的!

4

1 回答 1

1

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

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

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

  • Post_image
  • Post_text
  • Post_url

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

于 2013-07-07T14:45:14.470 回答