आप वास्तव में यह नहीं कहते कि आपकी पृष्ठभूमि क्या है और आप प्रोग्रामिंग के बारे में कितना जानते हैं और डेटाबेस डिज़ाइन . ऐसा लगता है कि आपको कुछ पढ़ना चाहिए। वैचारिक रूप से हालांकि आपका डिज़ाइन काफी सरल है। आपका विवरण केवल दो संस्थाओं की पहचान करता है:
- वित्तीय साधन; और
- उद्धरण।
तो फिर आपको विशेषताओं की पहचान करनी होगी।
वित्तीय साधन:
- सुरक्षा कोड;
- बाजार;
- आदि.
उद्धरण:
- टाइमस्टैम्प;
- वित्तीय साधन;
- बोली मूल्य; और
- कीमत पूछें।
वित्तीय साधन का संदर्भ वह है जिसे विदेशी कुंजी कहा जाता है। . प्रत्येक तालिका को एक प्राथमिक कुंजी की भी आवश्यकता होती है , शायद सिर्फ एक ऑटो-इन्क्रीमेंट फ़ील्ड।
संकल्पनात्मक रूप से काफी सरल।
CREATE TABLE instrument (
id BIGINT NOT NULL AUTO_INCREMENT,
code CHAR(4),
company_name VARCHAR(100),
PRIMARY KEY (id)
);
CREATE TABLE quote (
id BIGINT NOT NULL AUTO_INCREMENT,
intrument_id BIGINT NOT NULL,
dt DATETIME NOT NULL,
bid NUMERIC(8,3),
ask NUMERIC(8,3),
PRIMARY KEY (id)
)
CREATE INDEX instrument_idx1 ON instrument (code);
CREATE INDEX quote_idx1 ON quote (instrument_id, dt);
SELECT (bid + ask) / 2
FROM instrument i
JOIN quote q ON i.id = q.instrument_id
WHERE i.code = 'GOOG'
AND q.dt >= '01-06-2008' AND q.dt < '02-06-2008'
यदि आपका डेटासेट पर्याप्त रूप से बड़ा है तो आप तालिका में (बोली + पूछना) / 2 शामिल करना चाहेंगे ताकि आपको तुरंत गणना न करनी पड़े।
ठीक है, तो यह सामान्यीकृत दृश्य है। इसके बाद आपको प्रदर्शन अनुकूलन करना शुरू करना पड़ सकता है। अरबों पंक्तियों को इसमें संग्रहीत करने के बारे में इस प्रश्न पर विचार करें MySQL . विभाजन MySQL 5.1+ (काफी नया) की एक विशेषता है।
लेकिन एक और सवाल खुद से पूछना है:क्या आपको यह सारा डेटा स्टोर करने की ज़रूरत है? मैं यह पूछने का कारण यह है कि मैं ऑनलाइन ब्रोकिंग में काम करता था और हम केवल सभी ट्रेडों को एक बहुत ही सीमित विंडो के लिए संग्रहीत करते थे और ट्रेडों में उद्धरणों की तुलना में डेटा का एक छोटा सेट होता था, जो आप चाहते हैं।
डेटा की अरबों पंक्तियों को संग्रहीत करना एक गंभीर समस्या है और इसे हल करने के लिए आपको वास्तव में गंभीर सहायता की आवश्यकता है।