首页 > 解决方案 > SQL 数据模型:我应该如何存储对象(一种类型),其中一些将在所有用户之间共享,一些仅分配给特定用户?

问题描述

我正在为Usersand创建数据模型Reports(报告还与 1:many 有关系ReportConditions)。我担心的是一些报告将是系统报告,这意味着它们对于所有用户都是相同的,除了一些与用户相关的属性(例如isHidden,用户分配的标志)。其他报告将是用户自己创建的自定义报告,仅供创建者使用。

我看到了 3 个选项来解决这个问题。在我看来,每个都有一些缺点。我目前的偏好是我认为问题最少的解决方案:

  1. 有表Users链接到Reports1:many 关系。Reports表将存储系统报告和自定义报告,并相应地标记系统报告。对于系统报告的其他属性,我将为和SystemUserReports之间的多对多关系创建一个额外的连接表。缺点:系统和自定义报告的关系以及数据查询需要以不同的方式处理,例如。需要从自定义报告和系统报告中提取属性。不过,这似乎不是一个大问题。UsersReportsisHiddenReportsSystemUserReports

其他选项:

  1. 将每种报告存储在单独的表中:CustomReports(1:many with Users, 1:many with CustomReportConditions) 和SystemReports(many-to-many with Usersthrough UserSystemReports, 1:many with SystemReportConditions)。缺点:总共 5 个表格用于报告,它们存储的数据类型非常相似。

  2. 将所有内容存储在Reports相关的 1:many 中Users,没有其他关系,但克隆系统为每个用户报告数据。Reports缺点:和ReportConditions表中的数据量可能会增加一倍(或更多) 。

从良好实践/绩效的角度来看,我的首选选项是正确的选择吗?或者我应该期待这种方法会出现一些问题并选择其他方法(或完全不同的方法)?

标签: mysqlsqldatabasedata-modeling

解决方案


推荐阅读