命令多对多关系的最佳做法?

时间:2019-05-21 13:17:55

标签: database database-design relational-database database-normalization denormalized

我想为我的产品设计一个PostgreSQL数据库,该数据库需要处理有序的多对多关系。有两种解决方案:

  • (规范化数据库)创建一个中间表并将关系的顺序放在其中
  • (非规范化数据库)使用非规范化数据库并将所有数据保存在一个表中

我的数据模型是这样的:

表1(运动):

  • id

  • 名称

表2(锻炼):

  • 具有顺序
  • 的练习集

每个用户都可以创建自定义锻炼(具有定义顺序的锻炼列表)。我的问题是在数据库中保存关系的顺序,因为默认关系不保留顺序。

1 个答案:

答案 0 :(得分:0)

正如评论中所说,“最佳实践”假定确实存在一种最佳的做事方式,事实并非如此。在几乎所有软件设计解决方案中,您都必须以混乱且无法预测的方式来交易事物,这些交易几乎总是取决于上下文。

如果我理解您的问题,那么您的问题域的概念是“用户”,他创建了零个或多个锻炼,并且每个锻炼都有一个或多个练习,并且该练习发生的顺序是锻炼与运动之间关系的重要属性。

存储多对多关系的属性的通常方法是作为联接表上的其他列。

标准化的存储方式如下:

window.location.reload()

在权衡方面,我希望可以在没有重大挑战的情况下将其扩展到商品硬件上的数亿行。查询可能会变得相当复杂-您将要连接4个表-但这就是数据库的设计目的。数据模型使用单独的实体等描述(我理解为)问题域。

相关问题