結合プライマリ・キーと複合プライマリ・キーの違い

2191 ワード


転載先:https://www.cnblogs.com/CNty/p/10941398.html 
 
まず連合プライマリ・キーについてお話ししますが、連合プライマリ・キーは実は中間テーブルです.マルチペアマルチモデルでは、2つのテーブルのプライマリ・キーが結合プライマリ・キーを構成する必要があります.これにより、2つのテーブルの各データを調べることができます.次の例で説明します.
CREATE TABLE TEAM( 
Id MEDIUMINT AUTO_INCREMENT COMMENT '  ',
Dev VARCHAR (30) COMMENT '  ', 
Pm VARCHAR(30) COMMENT '    ', 
Hr VARCHAR(30) COMMENT '  ' , 
PRIMARY KEY (Id) 
)
ENGINE = INNODB, 
CHARSET = UTF8 ;

 
CREATE TABLE information (
Id MEDIUMINT AUTO_INCREMENT COMMENT '  ',
Name VARCHAR(30) COMMENT '  ',
Age int(10) COMMENT '  ',
PRIMARY KEY(Id)
)
ENGINE=INNODB,
CHARSET = UTF8;

 
2つのテーブル間の要素を問い合わせるために、中間テーブルTEAM_を作成します.info
CREATE TABLE IF NOT EXISTS TEAM_info(
Id MEDIUMINT AUTO_INCREMENT COMMENT '  Id',
TEAM_Id MEDIUMINT COMMENT '  Id',
info_Id MEDIUMINT COMMENT '  Id',
PRIMARY KEY(Id) 
)
ENGINE=INNODB,
CHARSET=UTF8;

その後、中間テーブルで連結テーブルクエリー操作を行うことができます.
次は複合プライマリ・キーです.1つのテーブルに1つのプライマリ・キーしかありませんが、必要に応じて、複数のフィールドを同時にプライマリ・キーとして設定できます.これを複合プライマリ・キーと呼びます.(PS:多くの人が連合キーに翻訳されているのを見ていますが、個人的には正確ではなく、混同しやすいと思います)例えば、テーブルを作成します.
CREATE TABLE IF NOT EXIST student(
Name VARCHAR (30 ) COMMENT '  ',
Age INT(30)  COMMENT '  ',
PRIMARY KEY(Name,Age) 
);

ここで、NameフィールドとAgeフィールドは複合プライマリ・キーであり、主にNameの重複を防止するために設定されているため、AgeとNameを複合プライマリ・キーとして設定すると、プライマリ・キーのフィールド長とフィールド数が少ないほど良い.次に、INNODBエンジンの下でプライマリ・キーの自己成長を設定するには、自己成長の列が最初の列でなければなりません.その後、非自己成長の列を指定するだけでいいので、自己成長の繰り返しが発生します.自己成長が繰り返されると、プライマリ・キー・インデックスまたは一意のインデックスを作成できます.テーブル構造が既に存在する場合、複合プライマリ・キーを追加するには、次の方法を使用します.
ALTER TABLE tb_name 
ADD PRIMARY KEY (
PRIMARY_KEY_NAME_1,
PRIMARY_KEY_NAME_2
);

なお,ここでは元のテーブル構造にプライマリ・キーがない必要があり,ある場合は,まずALTER DROPから元のプライマリ・キーを外し,複合プライマリ・キーを追加する必要がある.
≪結合プライマリ・キー|Join Primary Key|oem_src≫:複数対の多関係モデルで、クエリーを結合するために、2つのテーブルのプライマリ・キーを結合プライマリ・キーに構成します(テーブルに2つのプライマリ・キーがあるわけではありませんが、テーブルの列は他の2つのテーブルのプライマリ・キーに依存します).
複合プライマリ・キー:1つのテーブルで、(カラム1+カラム2+カラム...)追加されたデータは一意で、(列1+列2+列...)同時にメインキーを設定し、列1、列2、列...いずれもプライマリ・キーの一部です.