我已經爲使用連接表的CakePHP框架創建了一個應用程序。SQL加入表 - 它需要一個主鍵還是唯一的鍵?
我不確定是否需要主鍵來唯一標識連接表的每一行,如第一個SQL塊所示。
是否需要將這兩個字段設置爲唯一鍵還是都可以將它們設置爲主鍵並將id作爲主鍵?
我也被問及爲什麼使用表約束來聲明原子主鍵而不是列約束,這是否意味着我不應該爲連接表設置唯一鍵?
CREATE TABLE IF NOT EXISTS `categories_invoices` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`category_id` int(11) NOT NULL,
`invoice_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `category_id` (`category_id`,`invoice_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=163 ;
我在想解決辦法可能是同時設置鍵作爲唯一的和刪除主鍵如下所示:
CREATE TABLE IF NOT EXISTS `categories_invoices` (
`category_id` int(11) NOT NULL,
`invoice_id` int(11) NOT NULL,
UNIQUE KEY `category_id` (`category_id`,`invoice_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
我的確在測試中刪除該主鍵「ID」連接表只留下'category_id'和'invoice_id',應用程序仍然工作。這已將這兩個字段作爲連接表內的唯一字段。這實際上是正確的做法嗎?
CakePHP不支持組合主鍵。如果你想直接操作你的連接表,那麼文檔說明我應該添加一個主鍵。但是我沒有這個要求,所以你提供的SQL是正確的解決方案?要將連接表的兩個字段都刪除爲主鍵? –