MySQLで一対一の関係を定義する方法

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関係を定義する例を次に示します。

one-to-one-relationship

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;