結合テーブルを使用する CakePHP フレームワーク用のアプリケーションを作成しました。
SQL の最初のブロックに示されているように、結合テーブルの各行を一意に識別するために主キーが必要かどうかはわかりません。
2 つのフィールドを一意のキーとして設定する必要がありますか、それとも両方を主キーとして設定し、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」のみを残してテストしましたが、アプリケーションは引き続き機能しました。これにより、両方のフィールドが結合テーブル内の一意のフィールドとして残ります。これは実際に正しい習慣ですか?