はい、そこにあるものはすべて大丈夫に見えます。しかし...
いくつかの注意事項:
gender
には短いデータ型を使用します 桁;それを表現するのに255文字必要だとは思いません。 (適用される行の最大サイズには制限があります。)その値が少ない場合は、ENUM
を検討します。 データ型。
NOT NULL
も追加する可能性があります heroname、firstname、lastnameなど、これらの列のいくつかに対する制約。 DEFAULT ''
も追加する可能性があります 。場合によっては、何らかの理由で実際にNULL値を許可する必要がありますが、NOT NULL
を使用します。 できる限り。
TEXT
について躊躇しています 列。 TEXT
を使用しても問題はありません データ型ですが、それらが追加の列に格納する方がよい情報を「隠している」のではないかと疑っています。
外部キーの場合、使用するパターンに従って制約に名前を割り当て、ON UPDATE CASCADE ON DELETE CASCADE
も追加する可能性があります。
CONSTRAINT FK_superheroPower_power FOREIGN KEY (powerID)
REFERENCES power(id) ON UPDATE CASCADE ON DELETE CASCADE
識別子(テーブル名と列名)に関する注意
私たちのやり方では、すべてのテーブル名は小文字です。 。 (すべてのテーブル名を小文字に強制するMySQLオプションセットがあります。)これは、さまざまなオペレーティングシステム/ファイルシステム(大文字と小文字を区別するものとそうでないもの)の非互換性の問題を回避するために行います。
また、テーブル名は単数 。テーブルの名前は、1行の名前です。 表のはを表します。 _table
も含まれていません 名前の一部として。
MySQLの列名では大文字と小文字が区別されることはありませんが、列名にも常に小文字を使用します。列名を「キャメルケース」にするのではなく、アンダースコア文字を区切り文字として使用します。 power_id
対powerID
、hero_name
vs. heroName
。
フォローアップ
上記の私の「メモ」は、従わなければならない特定の規則ではありません。これらは私たちが使用する単なるパターンです。
これらのパターンに従うことは、ソフトウェアが成功することを保証するものではありませんが、それは私たちを助けます。
参考までに、これらのテーブルが別のパターンの例として、当店からの「最初のカット」としてどのように見えるかを示します。これはではありません 「正しい道」、それは私たちがチームとして決めた「道」にすぎません。
CREATE TABLE superhero
( id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'pk'
, hero_name VARCHAR(255) NOT NULL COMMENT ''
, first_name VARCHAR(255) NOT NULL DEFAULT '' COMMENT ''
, last_name VARCHAR(255) NOT NULL DEFAULT '' COMMENT ''
, first_appearance DATE COMMENT 'date superhero first appeared'
, gender ENUM('female','male','other') COMMENT 'female,male or other'
, biography_text TEXT COMMENT ''
, universe VARCHAR(255) COMMENT ''
, PRIMARY KEY(id)
, UNIQUE KEY superhero_UX1 (hero_name)
) ENGINE=InnoDB;
CREATE TABLE power
( id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'pk'
, name VARCHAR(255) NOT NULL COMMENT ''
, description_text TEXT NOT NULL COMMENT ''
, PRIMARY KEY(id)
, UNIQUE KEY power_UX1 (name)
) ENGINE=InnoDB;
CREATE TABLE superheropower
( superhero_id INT UNSIGNED NOT NULL COMMENT 'pk, fk ref superhero'
, power_id INT UNSIGNED NOT NULL COMMENT 'pk, fk ref power'
, PRIMARY KEY(superhero_id, power_id)
, CONSTRAINT FK_superheropower_superhero
FOREIGN KEY(superhero_id) REFERENCES superhero(id)
ON UPDATE CASCADE ON DELETE CASCADE
, CONSTRAINT FK_superheropower_power
FOREIGN KEY (power_id) REFERENCES power(id)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB;