我为使用连接表的 CakePHP 框架创建了一个应用程序。
我不确定是否需要一个主键来唯一标识连接表的每一行,如 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”,应用程序仍然有效。这使这两个字段都成为连接表中的唯一字段。这实际上是正确的做法吗?