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 तपासा.
पायऱ्या
- पहिलं उदाहरण run करा आणि प्रत्येक hub_id एकदाच येतो ते बघा.
- दुसरं उदाहरण run करा आणि shipments मध्ये hub_id परत परत येतो ते बघा.
- PRAGMA foreign_keys; चालवा; result 0 म्हणजे या connection साठी checks बंद आहेत, आणि 1 म्हणजे चालू आहेत.
- Key ची नावं सारखी असायलाच हवीत असं नाही, पण values जुळायला हव्यात हे लक्षात ठेवा.
उदाहरणे
उदाहरण 1 · dataset: swiftship_logistics
SELECT hub_id, hub_code, city, currency
FROM hubs
ORDER BY hub_id;Output
| hub_id | hub_code | city | currency |
|---|---|---|---|
| 1 | PNQ-01 | Pune | INR |
| 2 | BOM-02 | Mumbai | INR |
| 3 | DXB-01 | Dubai | AED |
| 4 | LHR-03 | London | GBP |
| 5 | SIN-01 | Singapore | SGD |
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_id | hub_id | tracking_code |
|---|---|---|
| 1001 | 1 | PNQ-01-00017 |
| 1002 | 1 | PNQ-01-00018 |
| 1003 | 2 | BOM-02-00102 |
| 1004 | 3 | DXB-01-00009 |
| 1005 | 3 | DXB-01-00010 |
| 1006 | 4 | LHR-03-00221 |
| 1007 | 1 | PNQ-01-00019 |
| 1008 | 2 | BOM-02-00103 |
| 1009 | 9 | LHR-03-00222 |
| 1010 | NULL | PNQ-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.
Ravindra Bagale's Tip – मराठी
नावावरून key unique आहे असं कधीच मानू नका. Lesson 14.3 मध्ये दाखवल्याप्रमाणे COUNT(*) आणि COUNT(DISTINCT key) ने तपासा, आणि NULLs सुद्धा शोधा.
Ravindra Bagale's Tip – हिंदी
नाम देखकर key को unique मत मानिए। Lesson 14.3 की तरह COUNT(*) और COUNT(DISTINCT key) से जाँचिए, और NULLs भी देखिए।