繁体   English   中英

在数据库表中存储“网站设置”数据的最佳方式?

[英]Best way of storing 'website settings' data in a database table?

我在一个市场上工作,想知道处理网站设置(如标题、网址、https、联系电子邮件、版本等)的最佳方式是什么。

我正在尝试构建表格,以便它易于更新,并且能够添加越来越多的设置来获取。

我开发了2个结构,要么保持一行,以列名作为设置名,以行列值作为设置值。 并仅用 mysql_fetch_assoc 回显第一行值列名。在此处输入图片说明

我也在考虑为每个设置都有一个新的自动增量行。 并将其转换为数组以从数据库中获取,以便为设置名称的即时获取列分配一个列名。在此处输入图片说明

你有什么方法可以有效地处理这个问题。 谢谢你。

每个不同的选项设置一行,每行使用一个名称/值对,可能是最好的方法。 它比很多列更灵活; 如果添加选项设置,则不必运行任何类型的ALTER TABLE操作。

WordPress wp_options 表就是这样工作的。 看这里。 http://codex.wordpress.org/Options_API

如果您有“复合”选项,则可以序列化一个 php 数组以将其存储在表的单行中。

首先,我会考虑另一件事,配置文件...

那么你应该问问自己你的项目需要什么......

首先,我会考虑配置文件与数据库:

数据库选项相对于配置文件的最大优势是可扩展性,如果您有许多应用程序/站点需要这些配置,那么请选择数据库,因为它可以避免您多次复制相同的配置文件,并存在版本控制和修改的所有问题所有这些不同“站点”上的文件

否则我会坚持使用配置文件,因为应用程序的访问速度更快,并且在 sql server 中断的情况下该文件可能仍然可用,在这种情况下,某些配置可能仍然相关,配置文件也可能包含在您的版本控制软件中。 出于某些安全原因,假设您的数据库在许多软件之间共享......

然后,如果你坚持使用数据库,我会推荐一行一标签一个配置,我认为管理记录比表结构更容易,特别是随着时间的推移和你的软件的演变。如果其他开发人员加入你的项目,你的表结构可能很快变成一团糟:]

最后一个参数是安全性......一个好的做法是将软件中的“数据库用户”设置为没有数据库结构修改权限的用户,只有访问/修改删除记录的权限;)

这两种方式都很好。 我想说的是,如果您想在管理面板中管理这些设置,按列进行设置会更好,因为您可以使用来自管理员的简单INSERT查询即时添加新设置。 哪个比ALTER TABLE查询更好(更安全)。

这将取决于您使用的技术。 例如在 PHP Symfony 项目中,设置主要存储在平面文件(Json、xml...)中。

我为客户开发了许多大型 Web 应用程序。 键/值表通常用于存储简单的设置。 如果您需要存储多个值,则必须序列化它们,因此有点棘手。

请记住密码敏感数据,例如密码(Sha256 + salt)。

最好的方法是创建两个表。 将设置存储为键/值的表:

CREATE TABLE Settings (
    Id INT NOT NULL PRIMARY KEY,
    Key NOT NULL NVARCHAR,
    Value NULL NVARCHAR
    EnvId INT NOT NULL
);

那么你需要一个环境表。

CREATE TABLE Environment  (
    Id INT NOT NULL PRIMARY KEY,
    Key NOT NULL NVARCHAR,
);

不要忘记外键约束。

此外,您应该在单独的架构中创建这些表。 您将能够通过过滤访问来应用安全策略。

因此,您可以使用多种环境(开发、测试、生产……),您只需要激活一个环境。 例如,您可以配置为不在开发环境中发送电子邮件,而是在生产环境中发送它们。

因此,您执行联接以获取指定环境的设置。 您可以添加布尔值以轻松地在环境之间切换。

如果你使用一个文件(它不需要数据库连接),你可以得到类似的东西(Json):

Env:
    Dev:
        Email: ~
    Prod: 
        Email: contact@superwebsite.com

首先,它完全取决于您的业务需求,但到目前为止,最好的方法是在下面创建一个设置表方案。

CREATE TABLE `settings` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `value` text NOT NULL,
  `type` enum('general','advanced') NOT NULL DEFAULT 'general'
);

在此处输入图片说明

例子

site_title = "example"
site_logo = "something.jpg"
site_url = "https://www.example.com"
address =  "#795 Folsom Ave, Suite 600 San Francisco"
email = "something@example.com"
mobile = "9898xxxxxx"

这是最好的方法,因为您永远不知道何时会引入新密钥。 这里name将是value将是value

值列data type应为TEXT以进行详细描述。

我又取了一列名为type data typeENUM ,用于区分数据。 您可以根据业务逻辑自定义类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM