私は、ノードのテーブル(権限に関連付けられたナビゲーションポイント)を保持する一般的なコンテンツ管理システムと、各種類のノード(ブログの投稿、コメント、添付ファイルなど)のテーブルを持っているとします。 (MySQLで)いつSQLテーブルに独自の数値プライマリキーを与える必要がありますか?
マイノードテーブルはそうのように見える:私は、一般的な権限を開発することができます
この方法を使用するCREATE TABLE attachments (
node_id INT PRIMARY KEY,
attachment_filename VARCHAR(255),
attachment_title VARCHAR(255),
FOREIGN KEY (node_id) REFERENCES nodes (node_id)
) ENGINE = InnoDB;
INSERT INTO node_types (type_name) VALUES ('attachment');
:
CREATE TABLE node_types (
type_id INT PRIMARY KEY AUTO_INCREMENT,
type_parent INT,
type_name VARCHAR(31) UNIQUE KEY,
FOREIGN KEY (type_parent) REFERENCES node_types(type_id)
) ENGINE = InnoDB;
CREATE TABLE nodes (
node_id INT PRIMARY KEY AUTO_INCREMENT,
type_id INT,
parent_id INT,
FOREIGN KEY (type_id) REFERENCES node_types (type_id),
FOREIGN KEY (parent_id) REFERENCES nodes (node_id)
) ENGINE = InnoDB;
そして、異なるタイプのノードを作成するために、私のような何かをnode_idを参照することで、すべての異なるノードタイプに特化する必要なく、ノードに適用されるシステムです。
この状況では、添付ファイルがノードと1対1の関係にあるノードであり、その主キーはnode_idに基づいているため、添付ファイルに「独自の」数字の主キーは与えませんでした。しかし、一部の人々は/行うだろう。添付ファイルテーブルを簡単にように書き換えることができます
CREATE TABLE attachments (
attachment_id INT PRIMARY KEY,
node_id INT UNIQUE NOT NULL, -- a node is-a attachment.
attachment_filename VARCHAR(255),
attachment_title VARCHAR(255)
FOREIGN KEY (node_id) REFERENCES nodes (node_id)
) ENGINE = InnoDB;
INSERT INTO node_types (type_name) VALUES ('attachment');
あなたが重要な理由はなぜか、なぜ1がテーブルに数値の一意の主キーIDを与えて置くではないと思いますか?特に、私は、「1 :! is-a relationshipを持つテーブルにプライマリキーを割り当てない」というビジネスに時には矛盾していると感じています。
なぜそれは良い練習、btwだろうか?添付ファイルに主キーを作成すると、それに利点はありますか? – user572491
@ user572491:そういうわけで、私は「それは良い習慣かもしれない」と言いました。あなたが話した相手と好きな人によって異なります。 - 利点について:あなたのロジックのいずれかでその列が必要ない場合、利点はありませんが、実際にはわずかにスペースを消費します。しかし、ある時点で、そのようなIDを必要とする追加のロジックを追加する必要がある場合は、すでにそれを持っているか、それに応じてテーブル構造を更新する必要があります。私が言ったように、それは本当に依存しています。 – sjngm