如何将每个用户的许多自定义表映射到真实数据库?
How to map many custom tables per user to a real DB?
有一个 Web 应用程序假设每个用户都有多个自定义 table。显示为 tables,带有类型化的列(数字、短文本、文件或对另一个 table 行的引用)。类似于轻量级 Excel,但带有类型化列。
在真实数据库中存储数据的最佳方式是什么?
一个可能的解决方案:创建一个包含字段 Int1、Int2 .. Int32、String1、String2 .. String32 等的巨型 table,假设永远不会有 table 包含更多超过 32 个相同类型的列。所有用户数据都将进入 table,table 本身将存储在 table 'Tables'.
中
我的工程师的所有胆量都反对这种方法,因为它感觉不到 'pure'。用户从未听说过 'Normalization',如果他们将数据保存在 table 中,他们 将 倾向于在每次另一个字典时添加另一列 table 应该被使用。因此,每种类型 32 列的限制对他们来说可能太难了。另一方面,大部分列都是空的,因为典型的简单 table 总共不会超过 5-10 列。
另一个解决方案:让真实数据库与虚拟数据库保持同步,每次用户创建一个 table 用于她的目的时,在真实数据库中执行相同的操作。它会在数据库中以千 table 秒结束,这不是典型情况,因此可能会降低性能。
或许,noSQL 就是答案?
如果您想使用 "One Big Table" 来存储一堆不相关的小表,那么
- 这不是关系设计,因此您在 SQL 和
中遇到困难也就不足为奇了
- SQL 中的一般方法是所谓的 EAV 或“Entity-Attribute-Value”设计,其中 Google 将 return 大量信息。最后,
- EAV 有效,但可以说,仍然 与此应用程序无关。
有一个 Web 应用程序假设每个用户都有多个自定义 table。显示为 tables,带有类型化的列(数字、短文本、文件或对另一个 table 行的引用)。类似于轻量级 Excel,但带有类型化列。
在真实数据库中存储数据的最佳方式是什么?
一个可能的解决方案:创建一个包含字段 Int1、Int2 .. Int32、String1、String2 .. String32 等的巨型 table,假设永远不会有 table 包含更多超过 32 个相同类型的列。所有用户数据都将进入 table,table 本身将存储在 table 'Tables'.
中我的工程师的所有胆量都反对这种方法,因为它感觉不到 'pure'。用户从未听说过 'Normalization',如果他们将数据保存在 table 中,他们 将 倾向于在每次另一个字典时添加另一列 table 应该被使用。因此,每种类型 32 列的限制对他们来说可能太难了。另一方面,大部分列都是空的,因为典型的简单 table 总共不会超过 5-10 列。
另一个解决方案:让真实数据库与虚拟数据库保持同步,每次用户创建一个 table 用于她的目的时,在真实数据库中执行相同的操作。它会在数据库中以千 table 秒结束,这不是典型情况,因此可能会降低性能。
或许,noSQL 就是答案?
如果您想使用 "One Big Table" 来存储一堆不相关的小表,那么
- 这不是关系设计,因此您在 SQL 和 中遇到困难也就不足为奇了
- SQL 中的一般方法是所谓的 EAV 或“Entity-Attribute-Value”设计,其中 Google 将 return 大量信息。最后,
- EAV 有效,但可以说,仍然 与此应用程序无关。