sql - 处理 CustomField 插入 - 哪个选项更高效且更易于维护
问题描述
我们有以下表结构:
用户表
UserId CompanyId FullName Email
1 1 Alex alex@alex.com
2 1 Sam sam@sam.com
3 2 Rohit rohit@rohit.com
自定义字段表
CustomFieldId CompanyId Name Type
1 1 DOB Datetime
2 1 CompanySize Number
3 2 LandingPage Text
自定义字段值表
UserId CustomFieldId DatetimeValue NumberValue TextValue
1 2 01-01-2020
1 2 10
1 3 Home
2 1
2 2 20
2 3 Product
请考虑以下事实:
- 特定 CompanyId 中有数百万用户
- 在 UI 中显示特定用户时,我们需要显示最终客户可以填写的所有自定义字段。
在这种情况下如何处理 CustomFieldValues 表?我们正在考虑以下选项
当为特定 CompanyId 创建新的 CustomField 行时,有一个 After Insert 触发器以在 CustomFieldValue 表中为所有用户创建所有相应的行。
- 我认为这会产生为 CustomFieldValue 表中的每个自定义字段创建这么多行的初始成本。(这也可能会锁定表,应用程序的用户将不得不等到所有插入完成)。
- 从公司中删除 CustomField 行时删除所有 CustomFieldValue 行的相同问题
- 但是对于 UI 和后端开发人员来说更容易,因为他们不需要担心 CustomFieldValue 是否没有为公司创建的自定义字段的条目
将 CustomField 添加到公司时,不要创建 CustomFieldValue 行。每当用户填写 UI 视图中的相关输入字段时,创建 CustomFieldValue
- 这将具有可忽略的插入成本,并且用户不必等待特定公司中所有用户在 CustomFieldValue 表中完成插入或删除操作。
- 缺点是开发人员必须确保相关的 CustomFields 显示在前端,即使 CustomFieldValue 表中还没有相关记录。
- 在最终用户每次更新自定义字段输入时,开发人员必须首先检查相应的 CustomFieldValue 行是否存在,如果存在 - 存储更新的值,如果不存在 - 创建 CustomFieldValue 行。
请提出一种高效且易于维护的解决方案。
解决方案
推荐阅读
- python - 使用 Python 3 从 XML 中的某些标签中读取所有值
- r - 面积图显示较大的值低于较小的值
- javascript - JavaScript 中的二十一点游戏
- angularjs - 如何在登录到angularjs的登录页面之前使用查询参数进行路由
- ubuntu - 如何在 Google Colab 上安装 gmpy2?
- reactjs - 截取 React 页面的建议方法
- mysql - 如何优化作为 2 个非常相似但聚合不同的查询的连接的查询
- gitlab-ci - systemd vs gitlab cicd
- javascript - 异步函数案例
- ansible - Ansible endfor 不结束循环