2

ライブラリなどを含む新しい Web アプリケーションに取り組んでいます

  1. ピクチャー
  2. ファイル

過去の種類のセクションのすべての種類がデータベースに異なるプロパティを持ち、それらの情報を 1 つのデータ テーブル内に格納できないため、3 つの異なるテーブルを作成する必要があります。

訪問者は本、ファイル、写真にコメントできます。コメント用の 1 つのモジュールを開発し、すべてのコメントを 1 つのテーブルに保存したいので、それを (comments) と呼びましょう。

私の質問は、これを行うために私が従わなければならない戦略は何ですか?

参考コラムの作成を考えて [reference_id] [nvarchar 50] おり、コメントはこのように保存します

  1. files_{id of file}
  2. pictures_{id of picture} など...それは素晴らしい方法でしょうか??

ありがとう

4

2 に答える 2

1

別の ItemId と ItemType を使用する必要があります。

さらに、ItemTypes を使用してテーブルを作成し、ItemId と ItemTypeId を保存できます。

このような構造:pictures_{id of picture}多くのスペースを浪費し、パフォーマンスやその後のコード開発に役立ちません。

例: 次のようなものからアイテム タイプを切り取る方法:

picture_1234

「_」を検索し、切り捨てられたテキストを数値に変換し、多くの SQL コードを記述する必要があります...

于 2013-01-03T00:07:06.440 に答える
0

私は非常によく似た質問に答えました: StackOverflowクローンでは、コメントテーブルは質問と回答に対してどのような関係が必要ですか?

あなたの場合、単一のテーブルを作成することをお勧めします。

CREATE TABLE Commentables (
  item_id INT AUTO_INCREMENT PRIMARY KEY
  item_type CHAR(1) NOT NULL,
  UNIQUE KEY (item_id, item_type)
);

次に、Books、Pictures、Filesのそれぞれは、Commentablesと1:1の関係にあります。

CREATE TABLE Books (
  book_id INT PRIMARY KEY, -- but not auto-increment
  item_type CHAR(1) NOT NULL DEFAULT 'B',
  FOREIGN KEY (book_id, item_type) REFERENCES Commentables(item_id, item_type)
);

写真とファイルについても同じようにします。item_typeは、本の場合は常に「B」、写真の場合は常に「P」、ファイルの場合は常に「F」である必要があります。したがって、Commentablesで本と写真が同じ行を参照することはできません。

次に、コメントは1つのテーブルCommentablesを参照できます。

CREATE TABLE Comments (
  comment_id INT AUTO_INCREMENT PRIMARY KEY,
  item_id INT NOT NULL,
  FOREIGN KEY (item_id) REFERENCES Commentables (item_id)
);
于 2013-01-03T00:21:24.963 に答える