2012-03-21 18 views
8

Tek bir giriş gerektiren bir veritabanında veri depolamak için en iyi uygulama nedir? Bir örnek, tüm uygulama/web sitesi ile ilgili yapılandırma verileri olacaktır. Sadece tek bir girişi olan bir tablo oluşturmak yaygın mıdır?Tek tekrarlı olmayan verileri bir veritabanına depolamanın en iyi yolu nedir?

Bir MongoDB veritabanı bağlamında soruyorum, ancak sorunun SQL veritabanları için de geçerli olduğunu düşünüyorum.

+1

olmazdı olacak sırf tekrar select * from myConfigView :)

ama, bir masa kullanmamaya hiçbir sebep

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

ve yapın: Böyle bir sabit kodlanmış görünüm oluşturabilirsiniz Bu uygulama katmanı tarafından ele alınması daha iyi olur mu? Anahtar değer çiftlerini okuyabileceğiniz/yazabileceğiniz yalnızca tek bir metin dosyası olabilir. Veritabanlarını kullanmak için belirli bir neden var mı? – cctan

cevap

0

MongoDB veritabanları için genellikle yeni bir "tablo" yapıyorum, ancak SQL veritabanları için çok daha fazla şey gerektirir (özellikle de diğerleri aynı veritabanında çalışırken; SQL, işlenebilir değil). , biraz daha dikkatli olmak isteyebilirsiniz. Bir SQL DB kullanıyorsanız, büyük olasılıkla anahtar adı ve değeri gibi sütunlara sahip olacaksınız ve her özellik bir satır olarak saklanacaktır.

1

MongoDB yılında , yaygın olarak veritabanlarında bulunan bir yardımcı tablo örneği Constants aranmak ve pi gibi değerlerini tutabilir

+0

Pekala, tüm değerleriniz aynı türde mi, yoksa dönüşüm türlerine aldırmıyorsanız ... –

5

tek JSON belgesi olarak ilgili tüm yapılandırmasını saklayabilir, fikri tüm uygulamaların veritabanı kullanarak o başlar aynı ölçeği ve hassaslığı kullanmak için gereklidir. Standart SQL'de, en fazla bir satırın, örn. (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 sonra bir tetikleyici aynı ulaşmak için gerekli olan CHECK kısıtlama desteklemediğinden.

0

İsim (config_name) ve bir değer (config_value) olan bir yapılandırma tablosu kullanıyorum. Kullanıcıların ad/değer çiftinin ne amaçla tasarlandığını ya da nerede kullanıldığını görebilmesi için bir yardım alanı bile ekliyorum.

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; 

Ardından php kodunu takip etmek, bir tuşun değerini kurtarır veya boş bir dize döndürür. Varsayalım $ db açık bir veritabanı bağlantısıdır. Tüm girişler küçük harfe zorlanır.

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; 
} 

Bu örnekte tüm mysql/php, ancak genel ilke kalır.

0

Rainecc'in söylediği gibi yapılandırmalar için bir tablo oluşturabilirim ve önbellek kullanarak tüm tabloyu belleğe almam :) ve oradan da (önbellek) kullanırdım. En iyisi olacak.

2

Bir tablo iyi olurdu, neden sadece bir satır olacak diye kullanmamanın bir sebebi yok.

Sadece en tuhaf bir fikrim vardı (onu uygulayamayacağım ama bunun için düşündüm). sadece bir satır

İlgili konular