0

私は自分のサイトのデータベースを作成しています。これには、ユーザーが異なるページに複数の添付ファイルをアップロードする必要があります。これらすべての添付ファイルを1つのテーブルに保持し、添付ファイルが必要になる他のテーブルからそのテーブルを参照したいと思います。

問題は、これをどのように行うかです。私はまだその論理を理解することができていません。私が念頭に置いているのは:

attachment_tbl:
attach_id  
file_name
description
item1_id -> FK
item2_id -> FK


item1_tbl:
item1_id
attachment1
attachment2


item2_tbl:
item2_id
attachment1
attachment2
attachment3

添付ファイルを持つ別のitem3_tblを追加するかのように、attachment_tblに複数のFKを含めずに、これらすべての添付ファイルを同じテーブルに保存するにはどうすればよいですか?別のFKがattachments_tblに追加されることを意味しますか?

同じことをするための他のもっと簡単でより良い方法はありますか?

4

2 に答える 2

3

アイテムと添付ファイルを 1 対多の関係で接続する関係テーブルを追加します。

attachment_tbl:
attach_id  
file_name
description

item_tbl:
item_id

item_attachment_tbl:
item_id -> FK
attach_id -> FK

添付ファイルごとに、item_attach テーブルに次の行があります。

item_id attach_id
-----------------
item1   attach1
item1   attach2
item2   attach3
item3   attach4
item3   attach5
item3   attach6

アイテムの添付ファイルを表示するには、テーブルを結合する必要があります。

select a.file_name, a.description
from attachment_tbl a
inner join item_attachment_tbl ia on a.attach_id = ia.attach_id
where ia.item_id = 87;

SQL フィドルも参照

于 2012-11-11T11:23:55.537 に答える
0

attachment_tbl に複数のforeign_keys が必要ない場合は、何らかの代償を払ってブリッジ テーブルを用意する必要があります (リレーションを保持したくない場合:)。しかし、異なる項目テーブルのレコードを区別するために、item_tbl_name として追加のフィールドが必要になります。それらを取得することはそれほど複雑ではありません。

item_attachment_tbl:
item_id -> FK
item_tbl_name
attach_id -> FK
于 2012-11-11T12:59:31.983 に答える