Ravindra BagaleCourses & study guides Track your progress

14. Tables join का होतात: Keys आणि Relationships

14.1 Primary Key आणि Foreign Key सोप्या भाषेत

का (Why). Company चा data अनेक tables मध्ये विभागलेला असतो, म्हणजे प्रत्येक माहिती एकदाच साठवली जाते. एका table चे rows दुसऱ्या table च्या कुठल्या rows शी संबंधित आहेत हे keys मुळे कळतं.

काय (What). Row म्हणजे एक record, जसा एक hub, आणि column म्हणजे त्याबद्दलची एक माहिती, जसं त्याचं शहर. Primary key म्हणजे असा column ज्याची value प्रत्येक row साठी वेगळी असते, जसा hubs मधला hub_id. Foreign key म्हणजे दुसऱ्या table मधला column जो तीच value साठवून परत बोट दाखवतो, जसा shipments मधला hub_id. SQLite मध्ये foreign key checks साधारणपणे default ने बंद असतात, पण SQLite कसं build केलं आहे त्यावर हे बदलू शकतं. म्हणून आत्ताचं setting बघायला PRAGMA foreign_keys चालवा. Checks हवे असतील तर प्रत्येक connection वर transaction सुरू करण्याआधी PRAGMA foreign_keys = ON चालवा, कारण transaction च्या आत हे setting बदलत नाही.

कसं (How). आधी hubs table बघा, मग shipments मधला hub_id column बघा, आणि foreign key setting तपासा.

पायऱ्या

  1. पहिलं उदाहरण run करा आणि प्रत्येक hub_id एकदाच येतो ते बघा.
  2. दुसरं उदाहरण run करा आणि shipments मध्ये hub_id परत परत येतो ते बघा.
  3. PRAGMA foreign_keys; चालवा; result 0 म्हणजे या connection साठी checks बंद आहेत, आणि 1 म्हणजे चालू आहेत.
  4. Key ची नावं सारखी असायलाच हवीत असं नाही, पण values जुळायला हव्यात हे लक्षात ठेवा.

उदाहरणे

उदाहरण 1 · dataset: swiftship_logistics

SELECT hub_id, hub_code, city, currency
FROM hubs
ORDER BY hub_id;

Output

hub_idhub_codecitycurrency
1PNQ-01PuneINR
2BOM-02MumbaiINR
3DXB-01DubaiAED
4LHR-03LondonGBP
5SIN-01SingaporeSGD

Meaning. प्रत्येक row म्हणजे एक hub, आणि प्रत्येक hub_id एकदाच येतो. म्हणूनच hub_id हा hubs चा primary key असू शकतो.

उदाहरण 2 · dataset: swiftship_logistics

SELECT shipment_id, hub_id, tracking_code
FROM shipments
ORDER BY shipment_id;

Output

shipment_idhub_idtracking_code
10011PNQ-01-00017
10021PNQ-01-00018
10032BOM-02-00102
10043DXB-01-00009
10053DXB-01-00010
10064LHR-03-00221
10071PNQ-01-00019
10082BOM-02-00103
10099LHR-03-00222
1010NULLPNQ-01-00020

Meaning. Hub 1 अनेक shipments मध्ये येतो, कारण एक hub अनेक parcels पाठवतो. Shipment 1009 hub 9 कडे बोट दाखवते, जो hubs मध्ये नाही, आणि 1010 ला अजून hub नाही.

उदाहरण 3 · dataset: swiftship_logistics

PRAGMA foreign_keys;

Output

foreign_keys
0

Meaning. Result 0 म्हणजे या connection वर SQLite foreign keys तपासत नाही. Checks बंद असताना hub 9 सारखी चुकीची value save होऊ शकते.

Ravindra Bagale's Tip

Never assume a key is unique because of its name. Check it with COUNT(*) and COUNT(DISTINCT key), and look for NULLs, as shown in lesson 14.3.