ホームページ > データベース > mysql チュートリアル > MySQL で複合外部キーを実装するにはどうすればよいですか?

MySQL で複合外部キーを実装するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-23 15:52:10
オリジナル
463 人が閲覧しました

How to Implement a Composite Foreign Key in MySQL?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート