使用不同的数据类型存储应用程序设置

U2r*_*ros 6 postgresql configuration

我正在开发一个 Web 应用程序,我计划将应用程序设置存储在数据库中的名称、值字段(一行 = 一个设置)中。

这些设置范围从目录路径到简单的是/否标志。显然,我无法将路径(字符串)存储到布尔字段中。

我唯一的选择是将值字段设为字符串,然后根据设置根据需要解释该值,还是有其他一些策略?

(我使用的是 PostgreSQL,但答案可能适用于任何数据库服务器。)

dez*_*zso 3

我能想到的保留类型的最简单方法如下:在application_settings表中创建与您拥有的不同类型一样多的列。这通常意味着布尔值、数字、日期和文本字段。所以你的桌子看起来像

CREATE TABLE application_settings (
      id serial PRIMARY KEY
    , setting_name text NOT NULL -- possibly UNIQUE
    , boolean_setting boolean
    , numeric_setting numeric -- or this can be an integer, too
    , date_setting date -- again, this can be timestamp, too
    , text_setting text
);
Run Code Online (Sandbox Code Playgroud)

如果您计划仅保留每个设置的一行(没有历史数据,则将该setting_name字段设置为UNIQUE。如果您在一行中仅保留一个值(这是我所期望的),那么您可以添加一个检查约束,例如

, CHECK (
    (boolean_setting IS NOT NULL)::integer + 
    (numeric_setting IS NOT NULL)::integer + 
    (date_setting IS NOT NULL)::integer + 
    (text_setting IS NOT NULL)::integer 
    = 1
  )
Run Code Online (Sandbox Code Playgroud)

根据您将值传递到此表中的方式,您可能也可能不需要某种验证。这可能涉及根据所提供的值的类型以及有效输入的列表或范围来检查设置名称。