0

私のサイトのユーザーはファイルをアップロードできます。この質問の助けを借りて、ファイル ステータスをモデル化するための 2 つの設計を考え出しました。

ステータスの例 -削除済み、保留中、禁止、アップロード中

設計 A - 個別のテーブル

ファイル- file_id(pk) | user_id(fk) | ファイル名

禁止されたファイル- file_id(fk) | 禁止理由 | admin_user | 時間

削除されたファイル- file_id(fk) | perm_delete | 時間 | 削除済み

保留中のファイル- file_id(fk) | 開始時刻 | 待機中


設計 B - ピボット テーブルと個別の情報テーブル (両方)

ファイル- file_id(pk) | user_id(fk) | ファイル名

ステータス- status_id(pk) status_text

ファイルのステータス- file_id(fk) | status_id(fk) | info_id(fk) <--これは、このステータスに関する情報を格納する別のテーブルのレコードにリンクします (例: (ban_reason、admin_user、time))

禁止情報- info_id(fk) | 禁止理由 | admin_user | 時間

削除された情報- info_id(fk) | perm_delete | 時間 | 削除済み

保留中の情報- info_id(fk) | 開始時刻 | 待機中


設計 A に関する私の主な懸念は、ファイルを選択するときに、それらが禁止されているかどうかなどを確認するために複数のテーブルに参加する必要があることです。設計 B は、1 つのテーブルに参加するだけでよいため、結合を実行する必要がないようにすることを目的としています。 .

どのデザインがお勧めですか?

選択クエリはデザイン A では遅すぎるでしょうか?

4

1 に答える 1