一尘不染

在SQL Server数据库中使用单行配置表。馊主意?

sql

在开发购物车应用程序时,我发现我需要根据管理员的偏好和要求保存设置和配置。该信息可以是公司信息,运输帐户ID,PayPal
API密钥,通知首选项等任何信息。

创建表以在关系数据库系统中存储单行似乎非常不合适。

存储此信息的适当方法是什么?

注意:我的DBMS是SQL Server 2008,并且编程层是使用ASP.NET(在C#中)实现的。


阅读 103

收藏
2021-05-05

共1个答案

一尘不染

过去,我已经完成了这两种方式-单行表和键/值对表-每种方法都有其积极性和消极性。

单排

  • 正值:值以正确的类型存储
  • 正面:由于上述原因,使用代码更容易处理
  • 正值:可以分别为每个设置提供默认值
  • 否定的:需要更改架构才能添加新设置
  • 否定的:如果有很多设置,表格可能会变得很宽

键/值对

  • 肯定:添加新设置不需要更改架构
  • 正:表架构狭窄,多余的行用于新设置
  • 负数:每个设置都具有相同的默认值(是否为空/空?)
  • 负数:所有内容都必须存储为字符串(即nvarchar)
  • 否定的:处理代码中的设置时,您必须知道设置是什么类型并将其强制转换

到目前为止,单行选项是最容易使用的选项。这是因为您可以将每个设置以其正确的类型存储在数据库中,而不必在代码中存储设置的类型及其查找键。

我担心使用这种方法的一件事是在“特殊”单行设置表中有多行。我克服了这一点(在SQL Server中):

  • 添加一个默认值为0的新位列
  • 创建检查约束以确保此列的值为0
  • 在位列上创建唯一约束

这意味着表中只能存在一行,因为bit列的值必须为0,但是由于唯一约束,只能有一行具有该值。

2021-05-05