Database design 全局设置的数据库表

Database design 全局设置的数据库表,database-design,Database Design,我正在为web应用程序设计一个数据库,希望有一个可配置全局设置的表。此表的设计是否有既定的最佳实践?我可以想出两种可能的解决办法,我相信肯定还有其他办法 最简单的方法是将键/值对作为字符串存储在其中。这只需要两列,但不能为单个项添加类型约束 另一种方法是为每个设置添加一列,但是整个表只有一行,这感觉有点奇怪 在大多数情况下,这是如何处理的?设置保存在(可能还有rails)中的方式是作为键/值对,但不是保存在数据库表中,而是保存在文件中,这样做的优点是既便于人读又易于解析。如果表中只有一行,那为什

我正在为web应用程序设计一个数据库,希望有一个可配置全局设置的表。此表的设计是否有既定的最佳实践?我可以想出两种可能的解决办法,我相信肯定还有其他办法

最简单的方法是将键/值对作为字符串存储在其中。这只需要两列,但不能为单个项添加类型约束

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


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

设置保存在(可能还有rails)中的方式是作为键/值对,但不是保存在数据库表中,而是保存在文件中,这样做的优点是既便于人读又易于解析。

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


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

如果要在数据库中执行此操作,我喜欢的方法是存储属性。属性具有键/值对。但它也有一个属性类型(指向AttributeType表),比如日志记录、siteConfig、externalReferences等等。然后,您还可以在AttributeType级别拥有一个表,该表指定要保存在attributes表中的数据类型。DataTypeID将与AttributeType一起存储。然后指向一个数据类型表进行查找。这样,您就可以知道您正在处理数字、日期、字符串、xml等。我发现这提供了最大的灵活性…如果您需要的话。

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

我喜欢STAii提倡的YAML方法


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

< P>我们在当前项目中使用的是一个名为SySPARM的系统参数表。此表主要是一个键/值表。它对键和值都使用VARCHAR。这允许我们以任何形式指定键以及值(真正转换为动作)


我喜欢使用DB,因为我们可以对应用程序进行实时调整。例如,当系统停止维护时,我们在其中设置了一个值,这样用户就无法访问web应用程序。我们可以在任何时候关闭或打开此功能,而无需部署任何应用程序。

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

例如:

db.name“myname”

db.host“myhost”

db.user“myuser”

db.password“mypassword”

我现在可以得到如下值:


$config->db->name;或完整数组$config->db

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

  • 使用行添加设置,而不是列。很容易想到“我永远不需要比这些更多的设置”,但你会的,它会变成一个巨大的,可怕的混乱。我看到了
  • 你的柱子应该是这样的:

    • id-int
    • 名称-varchar(50)
    • 值-文本
    • 数据类型-varchar(50)
    • 说明-文本
  • 该id将在应用程序循环中方便地显示您的设置,这是一个很好的实践

  • 如果可能,将“名称”设为唯一列

  • “text”数据类型与您的数据一致,因此,如果varchar(50)为每行留出50个字符,则无论发生什么情况,text都将根据数据量进行调整。如果您的数据是简单的,比如打开或关闭开关,那么它可以是一个字节,如果它是一个长拷贝,那么它可以在不强制较小的数据保持相同大小的情况下促进这一点。(我认为这就是它的工作原理,尽管最小大小可能大于一个字节——无论哪种方式,适应而不是符合预定义量的东西肯定是一个加号)

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

  • 描述:这些是评论。使用此命令告诉那些将跟踪您的人您为什么这样做,以及如何避免应用程序崩溃


  • 你在用什么平台?最好使用特定于平台的工具来处理配置。目前正在使用一个简单的php/mysql设置。我也不是死心塌地地使用数据库。如果有一个很好的非数据库解决方案,我对它非常开放。你肯定是在开玩笑吧?将XML粘贴到数据库中有什么意义?这将如何使事情比键/值表更简单呢?您可以使用。。。或3@ChssPly76:注意:我建议将其保存在一个文件中。与我的答案类似,但他想要一个“数据库”,而不仅仅是一个配置文件。@djangofan,他确实提到他想要一个“数据库”,但我们所说的问题