Database design 针对多种内容类型的数据库设计

Database design 针对多种内容类型的数据库设计,database-design,Database Design,我正在为我的新项目设计一个数据库。我想知道我的数据库设计是否正确,因为我不能100%确定 用户可以添加内容:图像、文本、URL。内容将在单个页面上列出,因此我认为创建单个内容类型将是最佳选择 到目前为止,我的结构如下: post - id - type ENUM - title - image NULL - text NULL - URL NULL post_image - id - filesystem - filename post_text -

我正在为我的新项目设计一个数据库。我想知道我的数据库设计是否正确,因为我不能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的关联。我在应用程序中使用条令作为ORM。为了获取内容,我有一个自定义方法来检查类型并返回正确的内容(文本、URL或图像路径)

这是你推荐的方法吗

我有两个选择:

  • 在post表中创建可为空的
    图像
    文本
    url
    字段
  • 创建单个
    内容
    字段
在使用上述两种方法时,我得到了非常简单且易于管理的数据库结构,但这可能会在将来导致一些问题

期待听到一些社区的声音


最好的

如您在评论中所述,此数据库设计将给您带来很大的灵活性。它包括在一篇文章中使用多种内容的可能性。正如您所提到的,这将永远不会被使用,您可以根据需要决定更改数据库设计。如果您将灵活性牢记在心或记录下来,它就不太可能导致问题

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

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

  • 后置图像
  • 后置文本
  • 发布url

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

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