मेरे पास एक परिदृश्य के लिए 'सर्वोत्तम अभ्यास' प्रश्न है।हाइबरनेट मैपिंग: एकाधिक कॉलम में एक कॉलम
परिदृश्य: डीबी में एकाधिक संस्थाएं, उदाहरण के लिए, दस्तावेज़, ब्लॉगपोस्ट, विकी व्यक्तियों द्वारा साझा की जा सकती है। प्रत्येक इकाई के लिए शेयर तालिका बनाने के बजाय, एक ही साझा तालिका बनाई जाती है। मुद्दा यह है कि विभिन्न संस्थाओं के साथ शेयर तालिका को कैसे मैप करना है?
मेरे पास तीन विकल्प हैं, कृपया सलाह दें कि कौन सा विकल्प सबसे अच्छा है, और यदि कोई बेहतर विकल्प है।
Option1: के रूप में मेज शेयरों बनाएँ:
SHARES
id (unique)
entityId (non DB enforced FK to DOCUMENTS, WIKIS, POSTS etc.)
entityType
sharedBy
sharedWith
sharedDate
यहाँ, entityId documentId, wikiId, postid आदि आदि करने के लिए एक FK हो जाएगा और entityType होगा पहचान entityId है कि किस प्रकार।
यह हाइबरनेट मॉडलिंग में मुद्दे हैं, जब इस तरह share.getDocument() या share.getWiki() आदि के रूप में इकाई मानचित्रण, करने के लिए शेयर बनाने
विकल्प 2: तालिका शेयरों बनाएं केवल हिस्सेदारी रखता है जो जानकारी, और फिर संकल्प सारणी बनाएं जो इकाई को साझा करें।
SHARES
id(PK)
sharedBy
sharedWith
sharedDate
shareType (helper field for searches)
SHARES_DOCUMENTS
share_id (unique ID and FK, one to one with SHARES)
document_id (FK to DOCUMENTS)
SHARES_POST
share_id (unique ID and FK, one to one with SHARES)
post_id (FK to POSTS)
more share tables here.
तो, बुद्धिमान हाइबरनेट, शेयर शेयर प्रकारों में से प्रत्येक के लिए एक करने के लिए एक हो सकता है (share.getDocument(), share.getPost() की तरह है, और shareType की पहचान करेगा जो संबंध 'सक्रिय' है)
विकल्प 3 विकल्प 1 की तरह, लेकिन इकाई आईडी
SHARES
id (unique ID)
documentId (FK to DOCUMENTS, nullable)
postId (FK to POSTS, nullable)
wikiId (FK to WIKIS, nullable)
sharedBy
sharedWith
sharedDate
sharedType
यहाँ के बजाय अलग-अलग स्तंभों बनाने के लिए, प्रत्येक स्तंभ संबंधित संस्था के लिए मैप किया जा सकता है, लेकिन वे व्यर्थ कर रहे हैं। साझा प्रकार पहचान सकता है कि कौन सा रिश्ता 'सक्रिय' है।
तो सवाल यह है कि कौन सा अभ्यास डेटाबेस के साथ-साथ हाइबरनेट मैपिंग (और अंतिम पूछताछ, प्रदर्शन के अनुसार) दोनों सर्वोत्तम है।
धन्यवाद एम बल्कि
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html –
पर एक नज़र डालें धन्यवाद, इसमें देखेंगे। लेकिन क्या यह वास्तव में एक विरासत मुद्दा है? या विरासत का उपयोग इसे हल करने के लिए किया जा सकता है। यदि प्रत्येक रिज़ॉल्यूशन टेबल में अतिरिक्त व्युत्पन्न जानकारी होती है, तो वे विरासत के लिए अर्हता प्राप्त कर सकते हैं, लेकिन वे केवल अलग-अलग इकाइयों के साथ संबंध रखते हैं। इसके अलावा, अधिकांश विरासत उदाहरण/दस्तावेज विभिन्न संस्थाओं के लिए एक कॉलम लिंक बनाने की कोशिश नहीं करते हैं। उनके पास वास्तव में स्वतंत्र क्षेत्र हैं जो उन्हें आगे परिभाषित करते हैं। –
एक दूसरे विचार पर, विभिन्न संस्थाओं के संबंध 'उन्हें आगे परिभाषित' करते हैं। मैं एकल तालिका विकल्प के साथ कई कक्षाओं में देखता हूं, और देखता हूं कि यह कैसे काम करता है। –