የመረጃ ቋቱ የግንኙነት ውሎች እና ግንኙነቶች በሰንጠረዥ ውስጥ ያለው ውሂብ የተገናኘበትን መንገድ ይገልፃል። ተዛማጅ የውሂብ ጎታ በአንድ የተወሰነ ቁልፍ የተገናኙ ተከታታይ ሁለት ወይም ከዚያ በላይ ሰንጠረዦችን ያቀፈ ነው። ተያያዥነት ያለው ዳታቤዝ ካልተዋቀሩ የውሂብ ጎታዎች ይለያል፣ እነዚህም በትልልቅ ዳታ ተነሳሽነት ውስጥ የተለመዱ ናቸው። ተዛማጅ የውሂብ ጎታዎች ሰንጠረዦች እንዴት እንደሚገለጹ እና በሰንጠረዦች መካከል ትክክለኛ ግንኙነት ምን እንደሆነ በተመለከተ ጥብቅ ደንቦችን ይፈልጋሉ።
የመረጃ ቋት ግንኙነት ዓይነቶች
ግንኙነቶች በመረጃ ቋት ሰንጠረዦች መካከል ያለውን ግንኙነት በኃይለኛ መንገዶች እንዲገልጹ ያስችሉዎታል። እነዚህ ግንኙነቶች JOINs በመባል የሚታወቁትን ኃይለኛ የጠረጴዛ አቋራጭ መጠይቆችን ለማከናወን ጥቅም ላይ ሊውሉ ይችላሉ።
በግንኙነቱ ውስጥ በተካተቱት የሰንጠረዥ ረድፎች ብዛት መሰረት የተሰየሙ ሶስት አይነት የውሂብ ጎታ ግንኙነቶች አሉ። እያንዳንዳቸው እነዚህ ሶስት የግንኙነት ዓይነቶች በሁለት ሰንጠረዦች መካከል ይገኛሉ።
- የአንድ ለአንድ ግንኙነት የሚከሰተው እያንዳንዱ የመጀመሪያው ሠንጠረዥ ግቤት በሁለተኛው ሠንጠረዥ ውስጥ አንድ አቻ ሲኖረው ነው። ሁሉንም መረጃዎች በአንድ ሠንጠረዥ ውስጥ ለማስቀመጥ ብዙ ጊዜ የበለጠ ቀልጣፋ ስለሆነ የአንድ ለአንድ ግንኙነት እምብዛም ጥቅም ላይ አይውልም። አንዳንድ የመረጃ ቋት ዲዛይነሮች ከሌላ ሠንጠረዥ ላይ የውሂብ ንዑስ ክፍል የያዙ ሰንጠረዦችን በመፍጠር ይህንን ግንኙነት ይጠቀማሉ።
- ከአንድ-ለብዙ ግንኙነቶች በጣም የተለመዱ የመረጃ ቋቶች ግንኙነት ናቸው። በሰንጠረዥ A ውስጥ ያለው እያንዳንዱ መዝገብ በሰንጠረዥ B ውስጥ ካለው አንድ ወይም ከዚያ በላይ መዛግብት ሲኖር ነው፣ ነገር ግን በሰንጠረዥ B ውስጥ ያለው እያንዳንዱ መዝገብ በሰንጠረዥ ሀ ውስጥ ካለው አንድ መዝገብ ጋር ብቻ ይዛመዳል። ለምሳሌ በአንደኛ ደረጃ ትምህርት ቤት ውስጥ በመምህራን ሠንጠረዥ እና በተማሪዎች ጠረጴዛ መካከል ያለው ግንኙነት። የመረጃ ቋቱ ከአንድ እስከ ብዙ ግንኙነት ሊሆን ይችላል ምክንያቱም እያንዳንዱ ተማሪ አንድ አስተማሪ ብቻ አለው ነገር ግን እያንዳንዱ መምህር ብዙ ተማሪዎች አሉት።ይህ ከአንድ እስከ ብዙ ንድፍ የተባዛ ውሂብን ለማስወገድ ይረዳል።
- ከብዙ እስከ ብዙ ግንኙነቶች የሚከሰቱት እያንዳንዱ መዝገብ በሰንጠረዥ A ውስጥ ካለው አንድ ወይም ከዚያ በላይ መዛግብት በሰንጠረዥ ቢ ላይ ሲሆን እያንዳንዱ መዝገብ ደግሞ ከአንድ ወይም ከዛ በላይ መዝገቦች ጋር ሲዛመድ ነው። በሰንጠረዥ ሀ ውስጥ። ለምሳሌ፣ በመምህራን ሰንጠረዥ እና በኮርሶች ሰንጠረዥ መካከል ያለው ግንኙነት ብዙ-ለብዙ ሊሆን ይችላል ምክንያቱም እያንዳንዱ አስተማሪ ከአንድ በላይ ኮርሶችን ሊያስተምር ይችላል እና እያንዳንዱ ኮርስ ከአንድ በላይ አስተማሪ ሊኖረው ይችላል።
የታች መስመር
ራስን የሚያመላክቱ ግንኙነቶች የሚከሰቱት አንድ ጠረጴዛ ብቻ ሲኖር ነው። አንድ የተለመደ ምሳሌ ስለ እያንዳንዱ ሰራተኛ ተቆጣጣሪ መረጃ የያዘ የሰራተኞች ሰንጠረዥ ነው. እያንዳንዱ ተቆጣጣሪ ሰራተኛ ነው እና ተቆጣጣሪ አለው. በዚህ ሁኔታ፣ እያንዳንዱ ሰራተኛ አንድ ተቆጣጣሪ ስላለው፣ ነገር ግን እያንዳንዱ ተቆጣጣሪ ከአንድ በላይ ሰራተኛ ሊኖረው ስለሚችል፣ ከአንድ እስከ ብዙ ያለው ግንኙነት አለ።
ከውጪ ቁልፎች ጋር ግንኙነት መፍጠር
የውጭ ቁልፍን በመግለጽ በሰንጠረዦች መካከል ግንኙነቶችን ይፈጥራሉ። ይህ ቁልፍ ሰንጠረዦቹ እንዴት እንደሚዛመዱ ለተዛማጅ ዳታቤዝ ይነግራል። በብዙ አጋጣሚዎች፣ በሰንጠረዥ A ውስጥ ያለ አምድ ከሠንጠረዥ B የተጠቀሱ ዋና ቁልፎችን ይዟል።
የመምህራንን እና የተማሪውን ጠረጴዛዎች ምሳሌ ተመልከት። የመምህራን ሠንጠረዥ መታወቂያ፣ ስም እና የኮርስ አምድ ይዟል፡
InstructorID | የመምህር_ስም | ኮርስ |
001 | John Doe | እንግሊዘኛ |
002 | Jane Schmoe | ሒሳብ |
የተማሪው ጠረጴዛ መታወቂያ፣ ስም እና የውጭ ቁልፍ አምድ ያካትታል፡
StudentID | የተማሪ_ስም | መምህር_FK |
0200 | ሎውል ስሚዝ | 001 |
0201 | Brian Short | 001 |
0202 | ኮርኪ ሜንዴዝ | 002 |
0203 | ሞኒካ ጆንስ | 001 |
አምድ መምህር_FK በተማሪዎች ሠንጠረዥ ውስጥ የአስተማሪን ዋና ቁልፍ እሴት በመምህራን ሠንጠረዥ ውስጥ ይጠቅሳል። በተደጋጋሚ፣ የውሂብ ጎታ ዲዛይነሮች ዋናውን ቁልፍ ወይም የውጭ ቁልፍ አምድ ለመለየት PK ወይም FK በአምድ ስም ይጠቀማሉ።
እነዚህ ሁለት ሰንጠረዦች በመምህራኑ እና በተማሪዎቹ መካከል ያለውን የአንድ ለአንድ ለአንድ ግንኙነት ያሳያሉ።
ግንኙነት እና የማጣቀሻ ታማኝነት
በጠረጴዛ ላይ የውጭ ቁልፍ ካከሉ በኋላ በሁለቱ ሰንጠረዦች መካከል የማጣቀሻ ታማኝነትን የሚያስፈጽም የውሂብ ጎታ ገደብ ይፍጠሩ። ይህ እርምጃ በሰንጠረዦች መካከል ያለው ግንኙነት ወጥነት ያለው መሆኑን ያረጋግጣል. አንዱ ሠንጠረዥ የሌላ ሠንጠረዥ የውጭ ቁልፍ ሲኖረው፣የማጣቀሻ ታማኝነት ማንኛውም የውጭ ቁልፍ እሴት በሰንጠረዥ B ውስጥ ያለውን ነባር መዝገብ መመልከቱ ያስፈልገዋል።
ግንኙነቶችን በመተግበር ላይ
በመረጃ ቋትዎ ላይ በመመስረት በሰንጠረዦች መካከል ያሉ ግንኙነቶችን በተለያየ መንገድ ተግባራዊ ያደርጋሉ። የማይክሮሶፍት መዳረሻ ሰንጠረዦችን እንድታገናኙ እና የማጣቀሻ ታማኝነትንም ለማስፈጸም የሚያስችል ጠንቋይ ይሰጥዎታል።
SQL በቀጥታ የሚጽፉ ከሆነ መጀመሪያ ጠረጴዛውን ይፍጠሩ አስተማሪዎች የመታወቂያ አምድ ዋናው ቁልፍ እንዲሆን በማወጅ፡
የጠረጴዛ አስተማሪዎች ፍጠር (InstructorID INT AUTO_INCREMENT ቀዳሚ ቁልፍ፣
የመምህር_ስም VARCHAR(100)፣
ኮርስ VARCHAR(100));
የተማሪዎችን ጠረጴዛ ሲፈጥሩ የአስተማሪ_ኤፍኬ አምድ በመምህራን ሠንጠረዥ ውስጥ ያለውን የInstructorID አምድ የሚያመለክት የውጭ ቁልፍ እንደሆነ ታውጃላችሁ፡
የጠረጴዛ ተማሪዎችን ይፍጠሩ (StudentID INT AUTO_INCREMENT ቀዳሚ ቁልፍ፣
የተማሪ_ስም VARCHAR(100)፣ Teacher_FK INT፣
የውጪ ቁልፍ (መምህር_FK) ማጣቀሻ መምህራን)(መመሪያ));
ግንኙነቶችን በመጠቀም ጠረጴዛዎችን ለመቀላቀል
በመረጃ ቋትዎ ውስጥ አንድ ወይም ከዚያ በላይ ግንኙነቶችን ከፈጠሩ በኋላ የSQL JOIN መጠይቆችን ከበርካታ ሰንጠረዦች መረጃን በማጣመር ኃይላቸውን ይጠቀሙ። በጣም የተለመደው የመቀላቀል አይነት SQL INNER JOIN ነው፣ እሱም ቀላል መቀላቀል ነው። የዚህ አይነት መቀላቀል የመቀላቀል ሁኔታን የሚያሟሉ ሁሉንም መዝገቦች ከአንድ ወይም ከዛ በላይ ሰንጠረዦች ይመልሳል።
ለምሳሌ፣ ይህ የJOIN ሁኔታ የተማሪ_ስምን፣ የአስተማሪን_ስም እና ኮርሱን ይመልሳል፣ በተማሪዎች ሠንጠረዥ ውስጥ ያለው የውጭ ቁልፍ ከመምህራኑ ሠንጠረዥ ውስጥ ካለው ዋና ቁልፍ ጋር ይዛመዳል፡
ተማሪዎችን ይምረጡ።የተማሪ_ስም ፣መምህራን።የመምህር_ስም ፣መምህራን።ኮርስ
ከተማሪዎች
INNER መምህራንን ይቀላቀሉበተማሪዎች።Teacher_FK=Teachers. InstructorID;
ይህ መግለጫ እንደዚህ ያለ ሠንጠረዥ ያወጣል፡
የተማሪ_ስም | የመምህር_ስም | ኮርስ |
ሎውል ስሚዝ | John Doe | እንግሊዘኛ |
Brian Short | John Doe | እንግሊዘኛ |
ኮርኪ ሜንዴዝ | Jane Schmoe | ሒሳብ |
ሞኒካ ጆንስ | John Doe | እንግሊዘኛ |