【问题标题】:Seperate tables with same attributes in SQL在 SQL 中分隔具有相同属性的表
【发布时间】:2019-12-31 08:38:47
【问题描述】:

当使用 SQL 数据库时,当我有具有相同属性的表时。

例如,如果我有

  • [posts] 带有属性(id、图片、描述、喜欢和不喜欢的数量)
  • [Comments] 带有属性(id、图像、描述、喜欢和不喜欢的数量)
  • [Replies] 带有属性(id、图片、描述、喜欢和不喜欢的数量)

我还有另一种类型的帖子,cmets,出于不同的原因回复,但具有相同的属性。

对于每种类型的帖子,我应该将它们分成三个表,还是应该将它们放在一个表中,因为每个表中的属性相同?

那么,如果我想将数据加载到 Web 应用程序中会发生什么?将数据放在一个表中或将其分开在检索数据的复杂性上是否有任何差异?或者什么是最好的?

【问题讨论】:

  • 这三个实体可能共享一些属性 - 但它们在逻辑上仍然是独立的实体 - 一个帖子可能有 0-n 个 cmets 和 0-n 个回复。我会明确地将它们分开到单独的表格中。

标签: sql database database-design complexity-theory


【解决方案1】:

答案完全取决于您如何使用这些表格。

将它们统一起来可以更轻松地编写以相同方式处理所有三种类型的逻辑(例如,向累积 X 点赞的用户授予徽章,或删除用户的所有内容)。

如果您想在将来更改这些表格(例如,添加仅适用于帖子但不适用于评论的编辑日期),将它们分开将提供更大的灵活性。

【讨论】:

  • 就我个人而言,我会将它们分开,因为它使表格更容易扩展,正如您提到的那样。实体在开发后期发生变化是很常见的(不幸的是)。
【解决方案2】:

你有一个经典的“取决于”。

如果您决定将帖子类型列全部保存在一个表中,您将不得不为其编制索引。但是,由于只有少量值,因此可能效率不高。

您可以按帖子类型对表进行分区,这会有所帮助。

如果您有 3 个表,您可能需要三种不同的方式来检索数据。

就我个人而言,我会选择对一张表进行分区并将其全部存储在一起。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 2017-09-12
    相关资源
    最近更新 更多