mysql - SQL 数据模型:我应该如何存储对象(一种类型),其中一些将在所有用户之间共享,一些仅分配给特定用户?
问题描述
我正在为Users
and创建数据模型Reports
(报告还与 1:many 有关系ReportConditions
)。我担心的是一些报告将是系统报告,这意味着它们对于所有用户都是相同的,除了一些与用户相关的属性(例如isHidden
,用户分配的标志)。其他报告将是用户自己创建的自定义报告,仅供创建者使用。
我看到了 3 个选项来解决这个问题。在我看来,每个都有一些缺点。我目前的偏好是我认为问题最少的解决方案:
- 有表
Users
链接到Reports
1:many 关系。Reports
表将存储系统报告和自定义报告,并相应地标记系统报告。对于系统报告的其他属性,我将为和SystemUserReports
之间的多对多关系创建一个额外的连接表。缺点:系统和自定义报告的关系以及数据查询需要以不同的方式处理,例如。需要从自定义报告和系统报告中提取属性。不过,这似乎不是一个大问题。Users
Reports
isHidden
Reports
SystemUserReports
其他选项:
将每种报告存储在单独的表中:
CustomReports
(1:many withUsers
, 1:many withCustomReportConditions
) 和SystemReports
(many-to-many withUsers
throughUserSystemReports
, 1:many withSystemReportConditions
)。缺点:总共 5 个表格用于报告,它们存储的数据类型非常相似。将所有内容存储在
Reports
相关的 1:many 中Users
,没有其他关系,但克隆系统为每个用户报告数据。Reports
缺点:和ReportConditions
表中的数据量可能会增加一倍(或更多) 。
从良好实践/绩效的角度来看,我的首选选项是正确的选择吗?或者我应该期待这种方法会出现一些问题并选择其他方法(或完全不同的方法)?
解决方案
推荐阅读
- sql - 为什么 pgAdmin 使用端口 1?
- excel - 在合并单元格上使用 OFFSET 函数 - EXCEL
- javascript - Adobe After Effects 使用 JavaScript 更改文本
- python - Python中的赋值是否类似于C中的指针?
- php - str_replace 不适用于 wordpress 标题
- javascript - '\b' 不能与 '\[' 或 '\]' 一起使用
- java - Hibernate 删除所有行并从 1 开始索引
- python - Python smtpib - 向多个收件人发送电子邮件
- firebase - Firebase:客户端无权访问所需数据
- sql - 如何比较当前行与下一行 - LEAD