什麼你所談論的是一個多到多關係。您正在使用交叉引用表的正確路徑。
查看外鍵和主鍵如何工作是很好的;每個表只能有一個主鍵,但可以有多個外鍵。但是,請注意,主鍵不必侷限於一列;您可以擁有跨越兩列,三列或更多列的主鍵。
這裏的解決方案是有兩個外鍵,一個用於每個列/表關係,另一個用於跨兩個表的主鍵。
下面是我一次使用的表格的示例,該表格以多對多的關係鏈接城市和縣。
mysql> show create table xref_cities_counties\G
*************************** 1. row ***************************
Table: xref_cities_counties
Create Table: CREATE TABLE `xref_cities_counties` (
`city_id` int(10) unsigned NOT NULL,
`county_id` tinyint(3) unsigned NOT NULL,
PRIMARY KEY (`city_id`,`county_id`),
KEY `city_id` (`city_id`),
KEY `county_id` (`county_id`),
CONSTRAINT `fk_xrefcitiescounties_cityid` FOREIGN KEY (`city_id`) REFERENCES `florida_cities` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_xrefcitiescounties_countyid` FOREIGN KEY (`county_id`) REFERENCES `florida_counties` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql>
mysql>
mysql> describe xref_cities_counties;
+-----------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+-------+
| city_id | int(10) unsigned | NO | PRI | | |
| county_id | tinyint(3) unsigned | NO | PRI | | |
+-----------+---------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql>
我會建議一些關於這個主題的額外閱讀。看起來你是一個好開始。
每當我嘗試這樣做,它似乎取代了以前的ID。爲什麼會這樣? –
@JakeSmith對不起 - 正如我所說的,我的mysql已經無法使用,所以我無法指導您正確創建超出create table語句的主鍵的詳細信息。 –
@JakeSmith如果您已經創建了一個表,您不想使用該「CREATE TABLE」語句,因爲該語句不包含任何外鍵定義。如果我沒有記錯的話,你會想使用'ALTER TABLE'語句。 –