MySQL एक टेबल पर एकाधिक FOREIGN KEY कंस्ट्रेंट जोड़ने की अनुमति देता है, शर्त यह है कि प्रत्येक फॉरेन की अलग पैरेंट टेबल को रेफरेंस करे।
उदाहरण सेटअप
पैरेंट टेबल 1: customer
mysql> DESCRIBE customer; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | Cust_id | int(11) | NO | PRI | NULL | | | ... | ... | ... | ... | ... | ... | +----------+-------------+------+-----+---------+-------+
पैरेंट टेबल 2: customer2
mysql> DESCRIBE customer2; +-------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+-------+ | cust_id | int(11) | YES | | NULL | | | First_name | varchar(20) | YES | | NULL | | | Last_name | varchar(20) | YES | | NULL | | | City | varchar(10) | YES | | NULL | | | cust_unq_id | int(11) | NO | PRI | 0 | | +-------------+-------------+------+-----+---------+-------+
चाइल्ड टेबल: orders1 (पहले से एक FK है)
mysql> DESCRIBE orders1; +--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | order_id | int(11) | NO | PRI | NULL | | | Product_name | varchar(25) | YES | | NULL | | | orderdate | date | YES | | NULL | | | Cust_id | int(11) | YES | MUL | NULL | | -- FK to customer | cust_unq_id | int(11) | YES | | NULL | | +--------------+-------------+------+-----+---------+-------+
दूसरा FOREIGN KEY जोड़ना
mysql> ALTER TABLE orders1
ADD FOREIGN KEY(cust_unq_id)
REFERENCES Customer2(cust_unq_id);
Query OK, 0 rows affected (0.25 sec)
परिणाम
mysql> DESCRIBE orders1; +--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | order_id | int(11) | NO | PRI | NULL | | | Product_name | varchar(25) | YES | | NULL | | | orderdate | date | YES | | NULL | | | Cust_id | int(11) | YES | MUL | NULL | | | cust_unq_id | int(11) | YES | MUL | NULL | | -- नया FK +--------------+-------------+------+-----+---------+-------+
नियम सारांश
| नियम | विवरण |
|---|---|
| एकाधिक FK अनुमति | हां, एक टेबल पर कई FK हो सकते हैं |
| अलग पैरेंट टेबल | प्रत्येक FK अलग पैरेंट टेबल को रेफरेंस करे |
| कॉलम ओवरलैप | एक ही कॉलम दो FK का हिस्सा नहीं हो सकता |
| Key कॉलम | FK कॉलम पर MUL दिखता है |
उपयोग के मामले
- ऑर्डर टेबल: ग्राहक FK + सेल्समैन FK + वेयरहाउस FK
- कई आयामों से रेफरेंस