तो कई कारणों से पॉलिमॉर्फिक एसोसिएशन को खराब डेटाबेस डिज़ाइन माना जाता है, उदा। आपके पास पॉलिमॉर्फिक आईडी कॉलम पर विदेशी कुंजी नहीं हो सकती है, इसलिए संदर्भित अखंडता समाप्त हो गई है।पॉलिमॉर्फिक एसोसिएशन के बजाय क्या उपयोग करें?
और, एसटीआई को भी खराब माना जाता है जब तक उप-प्रकार केवल व्यवहार पर भिन्न होते हैं।
तो मेरे सवाल का रेल/ActiveRecord के लिए है क्या इस परिदृश्य में कम बुराई है:
मैं अपने उपयोगकर्ताओं संस्थाओं के कई प्रकार के एक हाथ से आदेश दिया संग्रह बनाने के लिए अनुमति देने के लिए की जरूरत है।
बहुरूपी संघों स्कीमा का उपयोग करते हुए कुछ इस तरह दिखेगा:
-- collections
id, name, ...
-- exhibits
id, collection_id, exhibitable_type, exhibitable_id, position
-- photographs
id, ...
-- films
id, ...
-- paintings
id, ...
-- songs
id, ...
-- sculptures
id, ...
मैं एसटीआई इस्तेमाल कर सकते हैं और कुछ इस तरह है:
-- collections
id, name, ...
-- exhibits
id, collection_id, artwork_id, position
-- artworks
id, type, <photograph columns>, <film columns>, <painting columns>, etc.
लेकिन, क्योंकि मेरी कलाकृतियों और डेटा को लेकर मतभेद है (नहीं सिर्फ व्यवहार), अब मेरे पास सभी कलाकृतियों की मेज पर एनयूएलएल है। मैंने अपनी वस्तुओं के लिए एक विरासत पदानुक्रम भी पेश किया है जो पहले वहां नहीं था और मैं आमतौर पर सावधान हूं, खासकर जब इसका एकमात्र उद्देश्य डेटाबेस डिज़ाइन की सेवा करना है।
एसटीआई ऐसा प्रतीत होता है कि कम से कम क्वेरी और कोड के लिए यह आसान होगा।
तो कम बुराई कौन सा है?
-- collections
id, name, ...
-- exhibits
id, collection_id, artwork_id, position
-- artworks
id
-- photographs
artwork_id, <photograph columns>
-- films
artwork_id, <film columns>
इस एसटीआई के शून्य समस्या से छुटकारा पाने के हैं और यह भी तालिका नीचे आकार रखें:
फिर, अन्य विकल्प मल्टी-टेबल विरासत है। हमारे पास अभी भी ऑब्जेक्ट पदानुक्रम है जो मुझे नहीं लगता कि सख्ती से जरूरी है। लेकिन मेरी आंखों में सबसे बड़ी समस्या: रेल इसका समर्थन नहीं करते हैं। CITIER मणि बहुत अच्छा लग रहा है और हाल ही में यह काम करता है लेकिन यह व्यापक रूप से उपयोग नहीं किया जाता है इसलिए मैं इसे अपने ऐप की नींव में उपयोग करने के बारे में सतर्क हूं। मुझे लगता है कि मैं सीक्वेट या अन्य ओआरएम का उपयोग कर देख सकता हूं जिसमें सीटीआई समर्थन है।
सत्य मुझे लगता है मैं मल्टी-टेबल विरासत समाधान सबसे अच्छा
मैं स्थिति स्तंभ की जरूरत नहीं किया, तो मैं बस collections_photographs
की तरह अलग में शामिल होने के टेबल का प्रयोग करेंगे, collections_paintings
, collections_films
, आदि लेकिन मुझे पसंद है लगता है कहा जा मैन्युअल ऑर्डरिंग की आवश्यकता है।
तो, ऐसा लगता है विकल्प हैं:
- PA: nulls के बहुत सारे के साथ बड़ी मेज: रेफेरेंन्शिअल सत्यनिष्ठा की हानि (यह व्यवहार में फर्क पड़ता है अगर हमेशा डेटाबेस का उपयोग के लिए ActiveRecord का उपयोग कर?)
- एसटीआई
- CTI/एमटीआई: एक मणि पर निर्भर है कि व्यापक रूप से
कम बुराई है कौन सा नहीं किया जाता है और कोई अन्य विकल्प क्या हैं? मैं पोस्टग्रेस का उपयोग कर रहा हूँ।