sql - 将所有联系信息放在一张表中与使用键值表

标签 sql sql-server database orm key-value

(注意。问题不是 this 的重复问题,因为我正在处理 ORM 系统)

我的数据库中有一个表来存储所有联系人 信息。每个联系人的某些列是固定的(例如 Id、InsertDate 和 UpdateDate)。在我的程序中,我想为用户提供为每个联系人添加或删除属性的选项。 enter image description here

现在这里当然有两种选择:

  1. 首先是将其全部保存在一个表中,并在用户需要时添加和删除整个列;
  2. 创建一个键值表以保存每个属性及其类型并将记录连接到用户的 ID。

这些替代方案都是可行的。但我想知道哪个在速度方面更好?在程序中,用户查看整个 Contact 列表以检查更新将是一件很常见的事情。另外,我正在使用 ORM 框架(Microsoft 的 Entity Framework )来处理数据库查询。因此,如果用户要一直在表中添加和删除列,将它们映射到我的程序将是一项艰巨的任务。但同样,如果备选方案 (1) 比 (2) 明显更好,那么我可以重新考虑键值选项。

最佳答案

这两个我其实都做过。

示例#1

大而宽的表格,包含包含姓名、电话、地址和许多跟踪客户详细信息的小整数值的数据列。

示例 #2

许多不同的表格将所有字符变化数据字段、小整数值等分开

示例 #1 的编码速度要快得多,但就性能而言,一旦表格充满记录,它就会变得非常慢。 5000不是问题。当它达到 50,000 时,性能明显下降。

示例 #2 是我后来根据编码经验构建的,旨在解决示例 #1 中发现的问题。虽然获得我想要的记录需要更多时间(LEFT JOIN this 和 UNION that),但速度要快得多,因为您最终可以准确地挑选和选择客户想要的内容,而不必搜索一个充满数据的大型宽表,而这些数据不是全部被请求。

我会推荐示例 #2 以适合问题中的 #2。

并且您的用户为他们的数据集指定的列可以存储在他们自己的表中(取决于我想有多少)这将允许您在特定于该用户的表上进行绘制,这也将提供您可以无限地删除和添加列以适合特定设置。

然后您还可以有另一个表来跟踪自定义列表中的自定义列,这将使您能够稍后“恢复”列,如“您要将此添加到当前列选择中吗或您过去删除的这些列之一”。

关于sql - 将所有联系信息放在一张表中与使用键值表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30378812/

相关文章:

c# - 带有 'Available Values By Query' 的 SSRS 不返回 ValidValues 属性

c# - 插入记录并抛出异常

SQL Server : flatten results from One to Many query

php - 如何存储日期/出勤?

sql - Hive ORDER BY 查询结果错误

java - 删除查询无法正常工作

sql-server - 如何配置加密的 SQL Server 连接以防止 MITM 攻击?

sql - 计算列什么时候合适?

java - 是否有快速开发工具或IDE 用于开发定制的POS 应用程序?

mysql - MySQL 支持 STORAGE 语法吗?