0

現在、システムのデータベースを設計中です。外部キーの制約はたくさんあります。

私はいくつかのアドバイスを得ることができるかどうか、私は次のどれをすべきかどうか疑問に思っていました:

1)テーブル作成自体の間に制約を指定します。

CREATE TABLE IF NOT EXISTS abc
    (
    keyword VARCHAR(20) NOT NULL,
    id INT UNSIGNED NOT NULL,
    FOREIGN KEY (id) REFERENCES xyz(id) ON DELETE CASCADE ON UPDATE CASCADE
    )ENGINE=InnoDB;

2)FK制約なしでテーブルを作成し、後でテーブルを「変更」します。

CREATE TABLE IF NOT EXISTS abc
    (
    keyword VARCHAR(20) NOT NULL,
    id INT UNSIGNED NOT NULL,
    )ENGINE=InnoDB;
ALTER TABLE abc ADD CONSTRAINT fk_constraint FOREIGN KEY (id) REFERENCES xyz(id)
ON DELETE CASCADE ON UPDATE CASCADE;

テーブルxyzは、主キーとして「id」を持つ単なる別のテーブルです。

4

2 に答える 2

0

結果は同じになります。したがって、違いはありません。

新しいデータベースを作成する場合は、1つのステートメントでテーブルとその外部キーを作成します。スクリプトの見栄えが良くなります。ただし、この場合、親テーブルは子テーブルの前に作成する必要があります。

テーブルを作成するときに依存関係を考慮したくない場合は、スクリプトの最初にランダムな順序でテーブルを作成してから、ALTERTABLEを使用して外部キーを追加できます。

于 2012-11-09T07:35:48.640 に答える
0

FKは一度に作成できます。ただし、循環的に相互に参照できるため、これが常に可能であるとは限りません。また、FKを使用して、後で列を追加することもできます。

MySQLはいくつかの変更のためにテーブル構造を検証して再構築する必要があるため、一度に追加する方が少し速い場合があります(ただし、FKの追加がその1つであるかどうかはわかりません)。ただし、このプロセスは空のテーブルではかなり高速になるため、FKを追加する場合はそれほど重要ではありません。

于 2012-11-09T07:36:08.843 に答える