केवल गतिशील एसक्यूएल के साथ। कई अलग-अलग तालिकाओं में शामिल होना और प्रकार के आधार पर केस का उपयोग करना भी संभव है, लेकिन तालिकाओं को सभी को पहले से ही जाना होगा।
यदि आप जो हासिल करने की कोशिश कर रहे हैं, उसके बारे में और अधिक जानते हैं, तो आपका डिज़ाइन वर्तमान में कैसा दिखता है और आपने उस विशेष तालिका डिज़ाइन को पहली जगह क्यों चुना है, तो उचित डिजाइन की अनुशंसा करना आसान होगा।
Say you have a table of foods:
id INT
foodtype VARCHAR(50) (right now it just contains 'hotdog' or 'hamburger')
name VARCHAR(50)
Then hotdogs:
id INT
length INT
width INT
Then hamburgers:
id INT
radius INT
thickness INT
आम तौर पर मैं अस्तित्व के लिए केवल एक सहायक तालिका को बाधित करने के लिए कुछ प्रणाली की सिफारिश करेंगे, लेकिन सादगी के लिए, मुझे लगता है कि बाहर जा रहा हूँ।
SELECT f.*, hd.length, hd.width, hb.radius, hb.thickness
FROM foods f
LEFT JOIN hotdogs hd
ON hd.id = f.id
AND f.foodtype = 'hotdog'
LEFT JOIN hamburgers hb
ON hb.id = f.id
AND f.foodtype = 'hamburger'
अब आप कि ऐसी बात कोड उत्पन्न किया जा सकता देखेंगे (या यहां तक कि मक्खी पर एक बहुत ही धीमी गति से प्रोटोटाइप गतिशील एसक्यूएल के लिए) तालिका नाम और तालिका मेटाडाटा के लिए उपयोग के बारे में SELECT DISTINCT foodtype FROM foods
दिया कुछ मान्यताओं से।
समस्या यह है कि आखिरकार जो भी इस क्वेरी के परिणाम का उपभोग करता है उसे नए कॉलम जोड़े जाने पर नए कॉलम के बारे में पता होना चाहिए।
तो प्रश्न डेटा के आपके ग्राहक/उपभोक्ता को वापस ले जाता है - यह विभिन्न प्रकारों को कैसे संभालने जा रहा है? और एक ही सेट में विभिन्न प्रकार के होने का क्या अर्थ है? और यदि इसे विभिन्न प्रकारों से अवगत होना चाहिए, तो प्रत्येक प्रकार के लिए अलग-अलग प्रश्न लिखने या मैन्युअल क्वेरी को बदलने की क्या कमी है जब नए प्रकार जोड़े जाते हैं, वैसे भी इस तरह के बदलाव के सापेक्ष प्रभाव को देखते हैं?
स्रोत
2011-11-17 17:35:29
यह एक डिज़ाइन समस्या की तरह लगता है - यदि आप रनटाइम तक अपने जुड़ने को नहीं जानते हैं तो आप कभी भी संदर्भित अखंडता को कैसे लागू करेंगे? – tomfumb