2012-03-21 6 views
8

단일 항목 만 필요로하는 데이터베이스에 데이터를 저장하는 것이 가장 좋습니다. 전체 응용 프로그램/웹 사이트와 관련된 구성 데이터가 그 예입니다. 단일 항목 만있는 테이블을 만드는 것이 일반적입니까?단일 비 반복 데이터를 데이터베이스에 저장하는 가장 좋은 방법은 무엇입니까?

질문은 SQL 데이터베이스에도 유효하다고 생각하지만 MongoDB 데이터베이스의 컨텍스트에서 묻습니다.

+1

같으면있을 것이다해서 다시 select * from myConfigView :

하지만, 테이블을 사용하지 않는 이유가 없습니다를

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

및 수행이 같은 하드 코딩 된 뷰를 만들 수 있습니다 응용 프로그램 계층에서 처리하는 것이 더 낫지 않습니까? 키 값 쌍을 읽고 쓸 수있는 단일 텍스트 파일 일 수 있습니다. 데이터베이스를 사용해야하는 특별한 이유가 있습니까? – cctan

답변

0

MongoDB 데이터베이스의 경우 일반적으로 새로운 "테이블"을 만들지 만 SQL 데이터베이스의 경우 많은 데이터베이스가 필요합니다 (특히 다른 데이터베이스가 동일한 데이터베이스에서 작업하는 경우 SQL이 가단성이 없음). , 조금 더 조심하고 싶을 수도 있습니다.

1

SQL DB를 사용하는 경우 키 이름과 값과 같은 열이 있고 각 속성이 행으로 저장됩니다. MongoDB에서 모든 관련 구성을 하나의 JSON 문서로 저장할 수 있습니다.

+0

좋아, 만약 당신의 모든 값이 같은 타입이거나, 타입 변환을 신경 쓰지 않는다면 ... –

5

데이터베이스에서 일반적으로 발견되는 보조 테이블의 예는 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 지원하지 않기 때문에.

0

이름 (config_name)과 값 (config_value)이있는 config 테이블을 사용합니다. 필자는 사용자가 이름/값 쌍이 의도 된 것과 사용 된 곳을 볼 수 있도록 도움말 필드를 추가하기도합니다.

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는하지만, 일반적인 원리는 남아있다.

0

rainecc에서 말한 것처럼 설정 용 테이블을 만들고 캐시를 사용하여 모든 테이블을 메모리로 가져 와서 거기 (캐시)에서 사용합니다. 그것은 최고 일 것입니다.

2

테이블이 좋을 것입니다. 단 하나의 행만 있기 때문에 테이블을 사용하지 않는 것이 좋습니다.

나는 그저 이상한 아이디어를 가졌다. (나는 그것을 구현하지 않았지만 어떤 이유로 그것을 생각했다.) 그것은 단지 하나의 행

관련 문제