SQL の複合外部キー
データベース設計では、多くの場合、テーブル間のリレーションシップの作成が必要になります。 1 つのテーブルの主キーが複数の列で構成されている場合、それを別のテーブルの外部キーにリンクするのが困難になります。この質問では、複合主キーと外部キーを持つ 2 つのテーブル間の関係を確立する方法について説明します。
問題ステートメント
次の 2 つのテーブルについて考えてみましょう:
CREATE TABLE IF NOT EXISTS `tutorial` ( `beggingTime` time NOT NULL, `day` varchar(8) NOT NULL, `tutorId` int(3) NOT NULL, `maxMembers` int(2) NOT NULL, `minMembers` int(1) NOT NULL, PRIMARY KEY (`beggingTime`,`day`,`tutorId`), KEY `tutorId` (`tutorId`) ); CREATE TABLE IF NOT EXISTS `group` ( `groupId` tinyint(3) NOT NULL AUTO_INCREMENT, `status` varchar(20) NOT NULL, `groupName` varchar(50) NOT NULL, PRIMARY KEY (`groupId`) );
目的は、チュートリアル テーブルの複合主キーにリンクするフィールドをグループ テーブルに作成することです。疑問が生じます: これらのテーブルを効果的に関連付けるにはどうすればよいでしょうか?
解決策
MySQL ドキュメントによると、複合キーへの外部キー マッピングを設定することが可能です。これには、外部キー テーブルに複数の列を作成する必要があります。
ALTER TABLE `group` ADD COLUMN `beggingTime` time NOT NULL; ALTER TABLE `group` ADD COLUMN `day` varchar(8) NOT NULL; ALTER TABLE `group` ADD COLUMN `tutorId` int(3) NOT NULL; ALTER TABLE `group` ADD FOREIGN KEY (`beggingTime`,`day`,`tutorId`) REFERENCES tutorial(`beggingTime`,`day`,`tutorId`);
この方法では、チュートリアル テーブルの複合主キーのコンポーネントに対応する追加の列をグループ テーブルに作成します。
推奨事項
複合外部キーの作成は可能ですが、それが常に最良の設計選択であるとは限りません。他の回答が示唆しているように、テーブルの設計を再検討し、チュートリアル テーブルに単一列の主キーを使用することをお勧めします。これにより、データベースのパフォーマンスが向上し、関係管理が簡素化されます。
以上がMySQL で複合外部キーを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。