私は、結合テーブルを使用するCakePHPフレームワーク用のアプリケーションを作成しました。SQL Join Table - プライマリ・キーが必要か、ユニーク・キーのみが必要ですか?
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'だけを残してテーブルを結合し、アプリケーションはまだ動作しました。これにより、両方のフィールドが結合テーブル内の一意のフィールドとして残されました。これは実際に正しい練習ですか?
CakePHPは複合主キーをサポートしていません。ジョインテーブルを直接操作したい場合は、プライマリキーを追加する必要があります。しかし、私はこれのためのrequirmentを持っていないので、あなたが提供したSQLは正しい解決策ですか?主キーとして結合テーブルの両方のフィールドをdelcareするには? –