全局设置的数据库表

时间:2009-07-15 21:30:31

标签: database-design

我正在为Web应用程序设计一个数据库,并希望有一个可配置全局设置的表。这张桌子的设计是否有任何既定的最佳实践?我可以设想两种可能的解决方案,我相信必须有其他解决方案。

最简单的只是将键/值对存储在字符串中。这只需要两列,但不会给我任何向单个项添加类型约束的能力。

另一种方法是为每个设置添加一列,但是整个表只有一行,感觉有点奇怪。

在大多数情况下你是如何处理的?

8 个答案:

答案 0 :(得分:9)

我们在当前项目中使用的是名为SYSPARMS的System Paramaters表。该表主要是键/值表。它为键和值使用VARCHAR。这允许我们以任何形式指定键以及值(实际上转换为操作)。

我喜欢使用数据库,因为我们可以进行实时调整以影响应用程序。例如,我们在系统停机维护时设置了一个值,因此没有用户可以访问Web应用程序。我们可以随时关闭或打开此功能,而无需部署任何应用程序。

答案 1 :(得分:1)

设置保存在merb(可能是rails)中的方式是键/值对,但不在数据库表中,而是在YAML文件中,它具有两者的优点人类可读且易于解析。

答案 2 :(得分:1)

如果我要在数据库中执行此操作,我喜欢这样做的方式是存储属性。属性具有键/值对。但它也有一个属性类型(指向attributeTypes表),如logging,siteConfig,externalReferences,......什么。然后,您还可以在AttributeType级别拥有一个表,该表指定要在属性表中保存的数据类型。 DataTypeID将与AttributeTypes一起存储。然后,出于查找原因,这将指向DataTypes表。这样就可以让你知道你正在使用数字,日期,字符串,xml等。我发现这提供了最大的灵活性......如果你需要它。

答案 3 :(得分:1)

在ASP.Net中,您可以在名称/值对中的Web.Config文件中存储全局配置值。

答案 4 :(得分:1)

Zend Framework使用config.ini并且有一个很好的解析器,它根据点表示法将键拆分并分叉成数组和子数组。 config.ini可以作为实例加载并存储在注册表中。

示例:

db.name'myname'

db.host'myhost'

db.user'myuser'

db.password'mypassword'

我现在可以获得以下值:

组$ config-> DB->名称;或完整数组$ config-> db;

答案 5 :(得分:1)

我过去曾使用数据库表来存储应用程序设置,这非常有用。虽然,我同意你的担忧,但感觉应该有更好的方法来做到这一点。但是,我不知道它,所以我们走了:

  1. 使用行添加设置,而不是列。这很容易思考"我永远不需要比这些更多的设置"但你会,它将成为一个巨大,可怕的混乱。我已经看过了。
  2. 你的Colums应该是这样的:

    • id - int
    • name - varchar(50)
    • value - text
    • data_type - varchar(50)
    • description - text
  3. 在应用程序循环中显示您的设置时,id会派上用场,这只是一种很好的做法。

  4. 如果可能的话,请输入' name'一个独特的专栏。

  5. '''数据类型符合您的数据,因此varchar(50)为每行留出50个字符,无论如何,文本将根据有多少数据进行调整。如果您的数据像开关一样简单,它可以是一个字节,如果它是一个很长的副本,它可以促进这一点,而不会强制较小的数据大小相同。 (我认为这是它的工作原理,虽然最小尺寸可能大于一个字节 - 无论哪种方式,适应而不是符合预定量的东西绝对是一个加分。)

  6. data_type:这不是必需的,但听起来您想要一种方法来限制可以为每个设置输入什么类型的数据。这是行范例的缺点之一:数据类型仅仅是一个建议。如果您计划拥有一个管理工具,其中管理员是临时工并可能输入错误数据,那么这会更有用,然后您可以使用它来检查建议的值,然后再将其提交到表中并可能导致应用程序崩溃。当然,如果每个人都可以直接访问该表,这将不会做任何事情,但它也可以作为一个有用的指南。

  7. 描述:这些是评论。用这个来告诉那些将来你的人为什么你做了你做的事情,以及如何避免崩溃应用程序。

答案 6 :(得分:0)

如果表中只有一行,那么为什么要使用数据库呢?将配置以XML格式存储在文件中。

如果仍需要使用数据库,则将配置以XML格式存储在数据库的一个表的一行中的列中。

答案 7 :(得分:0)

我喜欢STAii倡导的YAML方法。

如果是.NET或Java应用程序,您还可以考虑使用XML并使用序列化来方便地获取用户设置的实例。