MySQLで1対1の関係を定義する方法
1対1の関係は、最初のテーブルに正確に1つのレコードがあり、関連テーブルの正確に1つのレコードに対応する場合に発生します。
MySQLには、1対1の関係を定義するための「準備完了」オプションは含まれていませんが、それを強制する場合は、add a foreign key from one primary key to the other primary keyを実行できます。これを行うと、両方のテーブルが1対1になります。自動的に関係。
例
MySQLでone-to-one関係を定義する例を次に示します。
STOCKテーブルは、stock_codeやstock_nameなどの頻繁な使用データを保存するために使用され、STOCK_DETAILは会社の詳細を保存します。 両方のテーブルには、同じStock_Idが主キーとして含まれています。 また、STOCK_DETAILテーブルでは、Stock_Idがプライマリキーであり、STOCKテーブルの外部キーでもあります。
Note
もう1つの古典的な1対1の例は、ユーザーとユーザープロファイルの設計です。
MySQLスクリプト
これは、テーブルを作成し、MySQLで関係を強制するSQLステートメントです。
DROP TABLE IF EXISTS `example`.`stock`; CREATE TABLE `example`.`stock` ( `STOCK_ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `STOCK_CODE` varchar(10) NOT NULL, `STOCK_NAME` varchar(20) NOT NULL, PRIMARY KEY (`STOCK_ID`) USING BTREE, UNIQUE KEY `UNI_STOCK_NAME` (`STOCK_NAME`), UNIQUE KEY `UNI_STOCK_CODE` (`STOCK_CODE`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `example`.`stock_detail`; CREATE TABLE `example`.`stock_detail` ( `STOCK_ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `COMP_NAME` varchar(100) NOT NULL, `COMP_DESC` varchar(255) NOT NULL, `REMARK` varchar(255) NOT NULL, `LISTED_DATE` date NOT NULL, PRIMARY KEY (`STOCK_ID`) USING BTREE, CONSTRAINT `FK_STOCK_ID` FOREIGN KEY (`STOCK_ID`) REFERENCES `stock` (`STOCK_ID`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;