मेरे पास 4 उप-वर्ग हैं: Video
, Image
, Note
, और Form
। प्रत्येक में विभिन्न प्रकार के डेटा होते हैं। उदाहरण के लिए, Image
कक्षा में डिस्क और छवि गुणों पर छवि फ़ाइल का पथ होता है, और Form
कक्षा में फ़ील्ड फ़ील्ड मान होते हैं। प्रत्येक आइटम के बीच आम तत्व, हालांकि, जीपीएस निर्देशांक और शीर्षक है, इसलिए मैं निम्नलिखित सार आधार वर्ग है:डेटाबेस में एक सार आधार वर्ग और उप-वर्ग मॉडल
public abstract class Content
{
public float? Latitude { get; set; }
public float? Longitude { get; set; }
public float? Heading { get; set; }
}
हालांकि, जहां मैं धुंधला मिलता है कि कैसे एक डेटाबेस में इस मॉडल के लिए चल रहा है। वर्तमान में मेरे पास Events
नामक एक सारणी है (उदाहरण के लिए, मान लीजिए कि एक घटना जन्मदिन की पार्टी है) और 4 टेबल (Videos
, Images
, Notes
, और Forms
)। प्रत्येक तालिका में एक विदेशी कुंजी Events
'प्राथमिक कुंजी पर वापस लिंक होती है।
LINQ-to-SQL का उपयोग करके, मुझे प्रत्येक तालिका के लिए 5 कक्षाएं मिलती हैं। यह ठीक है अगर मुझे केवल एक प्रकार का डेटा चाहिए, उदाहरण के लिए Event.Images
, लेकिन मैं जो करना चाहता हूं वह है 'सामग्री' की कुल संख्या Event
है और जीपीएस निर्देशांक प्राप्त करें। मैं केवल Event.Images.Count() + Event.Videos.Count() + ...
का उपयोग करके गिनती को काफी आसान कर सकता हूं, लेकिन मैं जीपीएस निर्देशांक के लिए ऐसा नहीं कर सकता। क्या कोई तरीका है कि मैं डेटाबेस को मॉडल कर सकता हूं ताकि मैं प्रत्येक आइटम के लिए बेस क्लास का उपयोग कर सकूं और फिर भी मुझे अपना डेटा देखने की आवश्यकता होने पर व्यक्ति को दृढ़ता से टाइप किए गए आइटम को प्राप्त करने में सक्षम हो?
लिंक के लिए धन्यवाद। वे मॉडल का उपयोग करने के तरीके पर बिल्कुल सही विवरण नहीं देते हैं, लेकिन यह मुझे और अधिक शोध करने के लिए एक प्रारंभिक बिंदु देता है। निजी तौर पर, मैंने हमेशा सोचा है कि एकल टेबल मॉडल एक बुरा विचार था क्योंकि इसका मतलब है कि यदि आप एक नया उप-वर्ग जोड़ते हैं, तो आपको इसके डेटा के लिए नए कॉलम जोड़ना होगा, और यह एक अवांछनीय आकार में गुब्बारा कर सकता है, हालांकि छोटे अनुप्रयोगों के लिए मैं इसका उपयोग करने की योग्यता देख सकता हूं। –
हां, निश्चित व्यापार-बंद हैं। यह सिर्फ नए प्रकार जोड़ने की संभावना पर निर्भर करता है। यदि असंभव है, तो एकाधिक तालिकाओं को पार करने से बचने और एकल तालिका का उपयोग करना बेहतर हो सकता है। यदि संभवतः, अन्य पैटर्न में से एक। और, हां, वे लिंक बहुत अस्पष्ट हैं क्योंकि वे चाहते हैं कि आप पुस्तक खरीद लें :-) यह एक अच्छी किताब है - मुझे लगता है कि लायक है। – SingleShot