パフォーマンスが設計戦略の唯一の基準である場合は、1 を選択します。非常に悪い選択であり、問題の後の段階で多くの問題が発生します。
データベースは正規化を念頭に置いて設計する必要があるため、間違いなくオプション 2 を選択する必要があります。
アップデート
正規化された例と正規化されていない例: DVD レンタルのテーブルがあり、誰が DVD をレンタルしたかを追跡したいとします。
フラットテーブル:
CREATE TABLE DVD (
DvdId INT NOT NULL AUTO_INCREMENT,
DvdTitle varchar(64),
Rental1 varchar(64),
Rental2 varchar(64),
Rental3 varchar(64),
Primary Key(DvdId)
);
レンタルエントリー3台分の空きがあり、その後トラブルあり。それ以外に、顧客の電話番号に追加のフィールドが必要な場合は、3 つの追加フィールドを作成する必要があります。
最初のステップの正規化:
CREATE TABLE DVD (
DvdId INT NOT NULL AUTO_INCREMENT,
DvdTitle varchar(64),
Primary Key(DvdId)
);
CREATE TABLE Rentals (
RentalId INT NOT NULL AUTO_INCREMENT,
DvdId INT NOT NULL,
CustomerName varchar(64),
RentalDate DateTime,
Primary Key(RentalId)
);
これは改善されていますが、まだ完全には正規化されていません。顧客が同じ DVD を 2 回レンタルした場合はどうなりますか。次に、レンタル テーブルに顧客エントリが 2 つあります。
最後の:
CREATE TABLE DVD (
DvdId INT NOT NULL AUTO_INCREMENT,
DvdTitle varchar(64),
Primary Key(DvdId)
);
CREATE TABLE Rentals (
RentalId INT NOT NULL AUTO_INCREMENT,
DvdId INT NOT NULL,
CustomerId INT NOT NULL,
RentalDate DateTime,
Primary Key(RentalId)
);
CREATE TABLE Customers (
CustomerId INT NOT NULL AUTO_INCREMENT,
CustomerName varchar(64),
Primary Key(CustomerId)
);