将单个非重复数据存储到数据库的最佳方法是什么?

时间:2012-03-21 08:00:57

标签: mysql sql mongodb database nosql

将数据存储在只需要单个条目的数据库中的最佳做法是什么。一个例子是与整个应用程序/网站有关的配置数据。为此创建一个只有一个条目的表是常见的吗?

我在MongoDB数据库的上下文中询问,虽然我认为这个问题对SQL数据库也有效。

6 个答案:

答案 0 :(得分:6)

数据库中常见的辅助表的示例将被称为Constants,并且可能包含pi的这些值,开头即使用数据库的所有应用程序都需要使用相同的比例和精度。在标准SQL中,要确保它们最多只有一行,例如(from Joe Celko):

CREATE TABLE Constants
(
 lock CHAR(1) DEFAULT 'X' NOT NULL PRIMARY KEY, 
 CHECK (lock = 'X'),
 pi FLOAT DEFAULT 3.142592653 NOT NULL,
 e FLOAT DEFAULT 2.71828182 NOT NULL,
 phi FLOAT DEFAULT 1.6180339887 NOT NULL, 
 ...
);

由于mySQL不支持CHECK约束,因此需要触发器来实现相同的目标。

答案 1 :(得分:4)

表格没问题,没有理由不使用它只是因为它只有一行。

我只是有一个最奇怪的想法(我不会实现它,但出于某种原因,我想到了这一点)。您可以创建这样的硬编码视图:

create view myConfigView 
as
select 'myConfigvalue1' as configValue1, 'myConfigvalue2' as configValue2

并且select * from myConfigView:)

但同样,没有理由不使用表只是因为它只有一行

答案 2 :(得分:1)

如果您使用的是SQL DB,则可能会有关键名称和值等列,并且每个属性都将存储为一行。 在MongoDB中,您可以将所有相关配置存储为单个JSON文档

答案 3 :(得分:0)

对于MongoDB数据库,我通常只创建一个新的“表”,但是,对于SQL数据库,这需要更多(特别是当其他人也在同一个数据库上工作时; SQL不具有可塑性),所以,你可能想要更加小心。

答案 4 :(得分:0)

我使用带有名称(config_name)和值(config_value)的配置表。我甚至添加了一个帮助字段,以便用户可以查看名称/值对的用途或使用位置。

CREATE TABLE  config (
  config_id bigint unsigned NOT NULL auto_increment,
  config_name varchar(128) NOT NULL,
  config_value text NOT NULL,
  config_help text COMMENT 'help',
  PRIMARY KEY  (config_id),
  UNIQUE KEY ix_config_name (config_name),
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

然后跟随php代码恢复键的值,或返回一个空字符串。假设$ db是一个开放的数据库连接。所有条目都被强制为小写。

function getConfigValue($name) {
    $retval='';
    $db = $this->db;
    $sql = 'select config_value from config where LOWER(config_name)="'.strtolower($name).'"';
    $result = $db->Query($sql);
    if ($result) {
        $row = $db->FetchAssoc($result);
        $retval = $row['config_value'];
    }
    return $retval;
}

在这个实例中所有的mysql / php,但一般原则仍然存在。

答案 5 :(得分:0)

我只是为配置创建表,就像rainecc告诉的那样,然后使用缓存将所有表都带到内存:)并从那里使用它(缓存)。这将是最好的。