क्या आपको वास्तव में 3 से अधिक टेबल का उपयोग करने की आवश्यकता नहीं है। Normalization आमतौर पर कई सामान्यीकृत संबंधों में एक गैर-सामान्यीकृत मॉडल को तोड़ने का तात्पर्य है।
आप अधिक से अधिक 3 टेबल हो सकता है, तो आपको निम्न (3NF में) पर विचार करना चाहते हो सकता है:
[]
में
Players: ([player_id], name, date_of_birth, ...)
Batters: ([batter_id], player_id)
Pitchers: ([pitcher_id], player_id)
Batting_Stats: ([batter_id, time_dimension], stat_1, stat_2, ...)
Pitching_Stats: ([pitcher_id, time_dimension], stat_1, stat_2, ...)
गुण प्राथमिक कुंजी को परिभाषित है, लेकिन अगर वरीय एक surrogate key इस्तेमाल किया जा सकता है। बैटर और पिचों में player_id
विशेषता unique constraint होनी चाहिए, और यह खिलाड़ियों के संबंध में foreign key भी होना चाहिए। बैटिंग_स्टैट्स और पिचिंग_स्टैट्स क्रमशः बैटर और पिचिंग के लिए एक विदेशी कुंजी भी होनी चाहिए।
नोट तथापि ऊपर लागू नहीं करता है कि है कि एक खिलाड़ी केवल एक बल्लेबाज या केवल एक घड़ा हो सकता है।
अद्यतन:
एक विधि मैं, लागू करने के लिए है कि एक खिलाड़ी केवल एक बल्लेबाज या केवल एक घड़ा है के बारे में पता कर रहा हूँ इस मॉडल के माध्यम से है:
Players: ([player_id], name, date_of_birth, ...)
Roles: ([role_id, role_type], player_id)
Batting_Stats: ([role_id, role_type, time_dimension], stat_1, stat_2, ...)
Pitching_Stats: ([role_id, role_type, time_dimension], stat_1, stat_2, ...)
role_type
चाहिए एक पिचर या बल्लेबाज को परिभाषित करें। Batting_Stats और Pitching_Stats में (role_id, role_type)
का उपयोग करके भूमिकाओं के लिए एक समग्र विदेशी कुंजी होनी चाहिए। भूमिकाओं में player_id
पर एक अनूठी बाधा यह सुनिश्चित करेगी कि एक खिलाड़ी के पास केवल एक ही हो, और केवल एक ही भूमिका हो। अंत में check constraints जोड़ें ताकि Batting_Stats.role_type = 'Batter'
और Pitching_Stats.role_type = 'Pitcher'
। ये चेक बाधा गारंटी है कि बैटिंग_स्टैट हमेशा बल्लेबाज का वर्णन कर रहा है, और एक पिचर नोट करें। पिचिंग_स्टैट्स के लिए भी यही लागू होता है।
आपके पास पहले से ही आपका समाधान है। स्टीवन ए लोवे द्वारा वर्णित कुंजी के साथ, अपने प्रश्न में वर्णित तीन तालिकाओं का उपयोग करें। आपके पास सामान्यीकरण समस्याएं _inside_ आपके आंकड़े तालिकाएं हो सकती हैं, लेकिन आपने खिलाड़ियों और आंकड़ों के बीच संबंधों का सही ढंग से मॉडल किया है। –
@ स्टीवन, मैं मानता हूं कि पिचर्स बल्ले (एनएल में और इंटरलीग प्ले में), लेकिन यह एक फंतासी बेसबॉल ड्राफ्ट टूल के लिए है और पिचर्स के बल्लेबाजी आंकड़े गिनते नहीं हैं। –