用于保存附件的数据库表

时间:2012-11-11 11:12:14

标签: mysql database

我正在为我的网站创建数据库,这要求用户在不同的页面上传多个附件。我希望将所有这些附件保留在一个表中,并从其他表中引用该表,其中需要附件。

现在的问题是我该怎么做?我还没有能够弄清楚它的逻辑。我的想法是:

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

现在如何在attachment_tbl中没有多个FK的情况下将所有这些附件保存在同一个表中,就像我添加另一个具有附件的item3_tbl一样,是否意味着要将另一个FK添加到attachments_tbl?

还有其他更简单,更好的方法吗?

2 个答案:

答案 0 :(得分:3)

添加一个关系表,它将项目和附件与一对多关系连接起来:

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 Fiddle

答案 1 :(得分:0)

如果你不想在attachment_tbl中有多个foreign_keys,那么你需要不惜任何代价拥有一个桥表(如果你想保持关系:)但是它需要一个额外的字段作为item_tbl_name来区分不同项目的记录表。把它们取回并不是那么复杂。

item_attachment_tbl:
item_id -> FK
item_tbl_name
attach_id -> FK