プライマリとして自動インクリメント ID を持つ 2 つのテーブルがあるのが一般的ですキー。ただし、これら 2 つのテーブル間の関係を確立するために 3 番目のリレーショナル テーブルを作成すると、多くの場合エラーが発生します。これは、自動的にインクリメントされる列が 1 つだけ許可されているか、初期テーブルから自動インクリメントを削除すると、型一致の問題により外部キーの作成が妨げられるためです。
いくつかの基本的な誤解に対処することが重要です:
リレーショナル テーブルには一意の行が必要ですが、自動インクリメントされる ID を使用して保証することはできません。主キー。リレーショナル テーブルを作成するには、各行を一意に識別するデータ属性で構成される実際の主キーを識別する必要があります。
ステップ 1: 真の主キーを定義する
各テーブルの行を一意に区別するデータ属性を識別します。これらのフィールドに一意の制約を宣言して、行の重複を防ぎます。
ステップ 2: ID フィールドを削除する
一意の行が確保されたら、余分な ID フィールド (およびそのサポート インデックス) は不要になるため、削除できます。
ステップ 3: 関連付けを作成するテーブル
2 つの主テーブルを結合する 3 番目のテーブルには、両方の親テーブルの主キーで構成される複合主キーが必要です。これにより、連想テーブル内で一意の行が保証されます。
user と sports の 2 つのテーブルがあるとします。それらの間の関係を確立するために、3 番目のテーブル user_sport を作成します:
CREATE TABLE user ( user_name CHAR(16) NOT NULL PRIMARY KEY, name_first CHAR(30) NOT NULL, name_last CHAR(30) NOT NULL, birth_date DATE NOT NULL ); CREATE TABLE sport ( sport_code CHAR(4) NOT NULL PRIMARY KEY, name CHAR(30) NOT NULL ); CREATE TABLE user_sport ( user_name CHAR(16) NOT NULL, sport_code CHAR(4) NOT NULL, start_date DATE NOT NULL, PRIMARY KEY (user_name, sport_code), FOREIGN KEY (user_name) REFERENCES user (user_name), FOREIGN KEY (sport_code) REFERENCES sport (sport_code) );
この例では:
これらの原則に従うことで、一意の行を持つリレーショナル テーブルを作成し、データの整合性を確保し、auto-sport の使用によって引き起こされる問題を回避できます。インクリメントされた ID を主キーとして使用します。
以上が自動インクリメント ID を使用せずにリレーショナル テーブルを適切に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。