将所有联系信息放在一个表中,而不是使用键值表

时间:2015-05-21 15:58:25

标签: sql sql-server database orm key-value

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

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

现在有两种选择:

  1. 首先是将它们全部保存在一个表中,并在用户需要时添加和删除整个列;
  2. 创建一个键值表,将每个属性与其类型一起保存,并将记录连接到用户的ID。
  3. 这些替代方案都是可行的。但我想知道哪一个在速度方面更好?在程序中,用户查看整个Contacts列表以检查更新将是一件非常普遍的事情。另外,我使用 ORM 框架(Microsoft的实体框架)来处理数据库查询。因此,如果用户要始终在表中添加和删除列,则将它们映射到我的程序将是一项艰巨的任务。但同样,如果替代(1)是明显比(2)更好的选择,那么我可以重新考虑键值选项。

1 个答案:

答案 0 :(得分:1)

我实际上已经完成了这两项工作。

示例#1

大型宽表,包含名称,电话,地址和跟踪客户详细信息的大量小整数值的数据列。

示例#2

许多不同的表分隔出所有字符变化数据字段,小整数值等。

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

示例#2是在我的编码经验之后构建的,旨在解决示例#1中发现的问题。虽然花了更多的时间来获取我所追踪的记录(LEFT JOIN this和UNION)但它的速度要快得多,因为你最终可以选择并完全选择客户端所需的内容而无需搜索大量宽大的数据表所有被要求。

我会推荐示例#2使你的#2符合问题。

你的USER为他们的数据集指定的列可以存储在一个表中,只是为了他们自己(取决于你有多少我猜),这将允许你绘制特定于该USER的表,这也将给出您无限制地删除和添加列以适应特定设置。

然后,您还可以使用另一个表跟踪自定义列表中的自定义列,这样您就可以在以后“恢复”列,例如“是否要将此列添加到当前列选项”或者您过去删除过的其中一列“。