スキーマの設計について少し混乱していますが、始める前に、まずスキーマを紹介しましょう。
CREATE TABLE Person
(
PersonID INT NOT NULL PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
-- some columns here..
CONSTRAINT tb_idF INDEX (FirstName),
CONSTRAINT tb_idL INDEX (LastName)
-- or
-- CONSTRAINT tb_idL INDEX (FirstName, LastName)
-- other constraints ...
);
CREATE TABLE JobDescription
(
JobDescriptionID INT NOT NULL PRIMARY KEY,
JobDescriptionName VARCHAR(50) UNIQUE
-- some columns here..
-- constraints ...
);
混乱はここにあります。テーブルのマッピングテーブル:Person
とJobDescription
。現在、私はこのデザインを持っています、
CREATE TABLE Person_JobDescription
(
RECID INT AUTO_INCREMENT PRIMARY KEY, -- for some special reasons
-- I need to map to other table
PersonID INT,
JobDescriptionID INT,
StartYear INT, -- year JobDescription was Appointed
EndYear INT,
CONSTRAINT tb_fk1 FOREIGN KEY (PersonID)
REFERENCES Person(PersonID),
CONSTRAINT tb_fk2 FOREIGN KEY (JobDescriptionID)
REFERENCES JobDescription(JobDescriptionID),
CONSTRAINT tb_uq UNIQUE (PersonID, JobDescriptionID)
);
しかし、私はマッピングテーブルのどの構造がこのようになるかについてこの別の考えを持っています
CREATE TABLE Person_JobDescription
(
PersonID INT, -- map these two columns on the other table
JobDescriptionID INT, -- ^^
StartYear INT, -- year JobDescription was Appointed
EndYear INT,
CONSTRAINT tb_fk1 FOREIGN KEY (PersonID)
REFERENCES Person(PersonID),
CONSTRAINT tb_fk2 FOREIGN KEY (JobDescriptionID)
REFERENCES JobDescription(JobDescriptionID),
CONSTRAINT tb_pk PRIMARY KEY (PersonID, JobDescriptionID)
);
上記のテーブルに対してクエリを作成してテストしたところ、どちらも同じ結果を返し、パフォーマンスも小さなデータベース(50kレコード)でテストした場合と同じです。2つのクエリが大規模なデータベースでどのように動作するのか疑問に思います。
質問
- 大規模なデータベースでは、マッピングテーブル()の2つのスキーマのどちらを
Person_JobDescription
優先しますか?
指示どおり、およびにUNIQUE
制約を作成することは許可されていません。しかし、私は2つの列にインデックスを提供しました。FirstName
LastName
- テーブルでどのタイプのインデックスを使用します
Person
か?FirstName
各列のインデックスまたはとの複合インデックスLastName
? - いつシングルインデックス以上
INDEX (Col1)
を使用しますか?INDEX (Col2)
INDEX (Col1, Col2)
この質問をお読みいただき、ありがとうございます。
よろしくお願いします、
デレクフロス