2012-03-21 15 views
8

डेटाबेस में डेटा संग्रहीत करने के लिए सबसे अच्छा अभ्यास क्या है जिसे कभी केवल एक प्रविष्टि की आवश्यकता होती है। एक उदाहरण कॉन्फ़िगरेशन डेटा होगा जो पूरे एप्लिकेशन/वेबसाइट से संबंधित है। क्या इस के लिए एक टेबल बनाना आम है जिसमें केवल एक ही प्रविष्टि है?डेटाबेस में एकल गैर-दोहराने वाले डेटा को स्टोर करने का सबसे अच्छा तरीका क्या है?

मैं एक मोंगोडीबी डेटाबेस के संदर्भ में पूछ रहा हूं हालांकि मुझे लगता है कि प्रश्न SQL डेटाबेस के लिए भी मान्य है।

+1

wouldn होगा

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

और कर select * from myConfigView :)

लेकिन फिर से, कोई कारण नहीं क्यों एक तालिका का उपयोग करने के लिए नहीं: आप इस तरह एक हार्ड-कोडेड दृश्य बना सकते हैं यह अनुप्रयोग परत द्वारा संभाला जाना बेहतर होगा? यह केवल एक पाठ फ़ाइल हो सकती है जहां आप मुख्य मूल्य जोड़े को पढ़/लिख सकते हैं। डेटाबेस का उपयोग करने के लिए कोई विशेष कारण है? – cctan

उत्तर

0

मोंगोडीबी डेटाबेस के लिए, मैं आमतौर पर केवल एक नई "टेबल" बना देता हूं, लेकिन, SQL डेटाबेस के लिए, जो बहुत अधिक होता है (विशेष रूप से जब अन्य एक ही डेटाबेस पर काम कर रहे होते हैं; एसक्यूएल लचीला नहीं है), इसलिए , आप इसके साथ थोड़ा और सावधान रहना चाहेंगे।

1

यदि आप SQL डीबी का उपयोग कर रहे हैं, तो आपके पास शायद कुंजी नाम, और मान जैसे कॉलम होंगे और प्रत्येक विशेषता को पंक्ति के रूप में संग्रहीत किया जाएगा। MongoDB में, आप एक भी JSON दस्तावेज़ के रूप में सभी संबंधित विन्यास स्टोर कर सकते हैं

+0

ठीक है मुझे लगता है कि आपके सभी मान एक ही प्रकार के हैं, या आप बातचीत प्रकारों को ध्यान में रखते हैं ... –

5

एक सहायक तालिका आमतौर पर डेटाबेस में पाया का एक उदाहरण Constants ही कहा जाता है और पाई के इस तरह के मूल्यों पकड़ सकते हैं, विचार है कि डेटाबेस का उपयोग कर सभी आवेदनों शुरू एक ही पैमाने और परिशुद्धता का उपयोग करने के लिए आवश्यक हैं। मानक एसक्यूएल में, यह सुनिश्चित करने के लिए कि वे सबसे अधिक पंक्ति में हैं उदा। (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) के साथ एक कॉन्फ़िगरेशन तालिका का उपयोग करता हूं। मैं एक सहायता फ़ील्ड भी जोड़ता हूं ताकि उपयोगकर्ता देख सकें कि नाम/मूल्य जोड़ी का उद्देश्य क्या है, या इसका उपयोग कहां किया जाता है।

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 कोड के बाद एक कुंजी के मान को पुनः प्राप्त करता है, या एक खाली स्ट्रिंग देता है। मान लें कि $ डीबी एक खुला डेटाबेस कनेक्शन है। सभी प्रविष्टियों को मामले को कम करने के लिए मजबूर किया जाता है।

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

मैं विन्यास के लिए तालिका बनाउंगा, जैसा कि रेनेक ने कहा था, और कैश का उपयोग तब सभी मेमोरी को स्मृति में ले जाने के लिए :) और वहां से इसका उपयोग करें (कैश)। यह सबसे अच्छा होगा।

2

एक तालिका ठीक होगी, इसका कोई कारण नहीं है कि इसका उपयोग न करें क्योंकि इसमें केवल एक पंक्ति होगी।

मुझे अभी अजीब विचार था (मैं इसे लागू नहीं करूँगा लेकिन किसी कारण से मैंने इसके बारे में सोचा था)। सिर्फ इसलिए कि यह केवल एक पंक्ति

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^