数据库中的应用程序设置

Cen*_*bit 8 mysql configuration php

过去,我将所有通用设置和配置项(例如:自定义应用程序标题、家庭地址、版本、调试等)存储在“settings.php”文件中,我会将其包含在所有脚本中。

我认为最好为这些应用程序设置专门设置一个数据库表,这样您就不需要编辑 php 文件来调整或进行更改。然而,我对如何设置这个有点谨慎。

我一直在考虑两种选择:

  1. 我有一个包含一行多列的表格,使每一列成为唯一的变量值。
  2. 我有两列,第一列是变量名,第二列是变量的值。

从数据库设计的角度来看,有什么建议或我应该注意的事情吗?

Rol*_*DBA 9

在选项 1 下,您保证只有一行(如果您记得第一手插入一行)。

  • 如果要引入新设置,则必须执行 ALTER TABLE 以添加所需的列。
  • 如果要删除旧设置,则必须执行 ALTER TABLE 以删除不需要的列。
  • 您必须假设代码中存在该列。否则,您可能必须查询information_schema.columns以确保表示所需设置的列是否存在于表中。在繁重的写入环境中,在存在数十(甚至数百)个 InnoDB 表的情况下,查询表 information_schema.columns 是非常糟糕的。这可能会间歇性地锁定 information_schema.columns,直到它可以自由读取。
  • 您应该确保表计数始终为一(1)。

在选项 2 下,情况略有不同

  • 如果要引入新设置,则必须执行 INSERT 以将所需设置添加为行。
  • 如果您想删除旧设置,则必须执行 DELETE 以将所需设置作为一行删除。
  • 您必须按变量名称查询表以查看该选项是否存在。
  • 在表中添加或删除设置没有虚拟限制

这些选项有什么共同点?

  • 如果您不理会旧设置,这可以允许旧版本的应用程序代码使用旧设置,但这只会使表格变得混乱。
  • 存储引擎应该是 InnoDB 以允许多人读取它。

就我个人而言,我会选择选项 2,因为创建新设置、可选地删除旧设置以及检查现有设置都将在一张桌子上进行。检索设置的方法都是一样的。在选项 1 下,您必须查询 information_schema.columns 并对设置表做出某些假设。用于检索设置的事件序列可能会因代码版本而异。