0

スーパータイプテーブルと2つの子サブタイプテーブル、および3番目の正規テーブルがあります。私の質問は、中間のsupertypeTableを含めずに、通常のテーブルをサブタイプテーブルの1つに結合することに関するものです。以下のCREATEステートメントに見られるように、normalTable1のインデックスはすべてsupertypeTableに関連しており、サブタイプテーブルのいずれにも関連していませんが、サブタイプテーブルのPKはスーパータイプテーブルと同じです。単純に実行できSELECT whatever FROM subtypeTable1 AS s INNER JOIN normalTable1 AS n ON n.supertypeTable_id=s.supertypeTable_id...ますか、それとも追加のインデックスを含める必要がありますか、それとも結合にsupertypeTableを含める必要がありますか?ありがとうございました

supertypeTable
-id (PK)
-data

subtypeTable1
-supertypeTable_id (PK and also FK with a 1-to-1 relationship to supertypeTable.id)
-data

subtypeTable2
-supertypeTable_id (PK and also FK with a 1-to-1 relationship to supertypeTable.id)
-data

normalTable1
-id (PK)
-supertypeTable_id (FK with a many-to-one relationship to supertypeTable.id)
-data

  CREATE normalTable1 (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  supertypeTable_id INT UNSIGNED NOT NULL ,
  data VARCHAR(45) NULL ,
  PRIMARY KEY (id) ,
  INDEX fk1 (supertypeTable_id ASC) ,
  CONSTRAINT fk2
    FOREIGN KEY (supertypeTable_id )
    REFERENCES supertypeTabl (id )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  ENGINE = InnoDB;
4

1 に答える 1

1

キーが一致する限り、クエリに不要な中間テーブルを含める必要はありません。通常のテーブルをサブタイプテーブルに結合するだけです。SQL(およびリレーショナル)結合は、パスの追跡ではなく、一致する値に基づいています。

ただし、テーブル構造には、この質問とは関係のないいくつかの問題があります。このSOの回答を参照し、その中の「party_type」列をよく見てください。

于 2013-02-20T15:03:10.263 に答える