यदि आपका वांछित पदानुक्रम कार्यक्रम है -> विषय -> किनारा -> वर्ष -> इकाई -> Learning_event, तो आपको इसे प्रतिबिंबित करने के लिए अपनी तालिका संरचना को समायोजित करना चाहिए। विशेष रूप से विषय में विषय और कार्यक्रम के बीच एक विदेशी कुंजी संबंध होना चाहिए, और आपको वर्ष के लिए एक अतिरिक्त स्तर की आवश्यकता होती है। विषय और कार्यक्रम के बीच एक विदेशी कुंजी होने से क्रॉस जॉइन की आवश्यकता से बचा जाता है। क्रॉस जॉइन में आपको काटने की आदत होती है और आमतौर पर इनसे बचना चाहिए।
अगर आप इसे देखें db fiddle आप देखेंगे कि मैंने ये परिवर्तन किए हैं। मैंने आरक्षित शब्द का उपयोग करने से बचने के लिए वर्ष स्तर के स्ट्रैंडियर को बुलाया है, लेकिन इरादा स्पष्ट होना चाहिए। अब पेड़ में उच्च स्तर से विवरण मान लेने के लिए जॉइन इनर जॉइन (बाएं जुड़ने के बजाय) बन जाते हैं, और नीचे के स्तर (learning_events) में स्वचालित रूप से केवल वे मान होते हैं जो स्ट्रैंड, वर्ष और इकाई से मेल खाते हैं, इसके अलावा कोई अन्य कारण नहीं है। यह कि संरचना स्वयं इस बात की गारंटी देती है कि प्रत्येक स्तर में ऊपर के स्तर की एक विदेशी कुंजी है।
ध्यान दें कि विदेशी कुंजी प्रभावी रूप से चेन लिंक करती है। उदाहरण के लिए, आपको सीखने_घटना और स्ट्रैंड के बीच एक विशिष्ट विदेशी कुंजी की आवश्यकता नहीं है, क्योंकि श्रृंखला में हस्तक्षेप करने वाली कुंजियाँ रिश्ते की गारंटी देती हैं।