我正在为我的网站创建数据库,这要求用户在不同的页面上传多个附件。我希望将所有这些附件保留在一个表中,并从其他表中引用该表,其中需要附件。
现在的问题是我该怎么做?我还没有能够弄清楚它的逻辑。我的想法是:
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?
还有其他更简单,更好的方法吗?
答案 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;
答案 1 :(得分:0)
如果你不想在attachment_tbl中有多个foreign_keys,那么你需要不惜任何代价拥有一个桥表(如果你想保持关系:)但是它需要一个额外的字段作为item_tbl_name来区分不同项目的记录表。把它们取回并不是那么复杂。
item_attachment_tbl:
item_id -> FK
item_tbl_name
attach_id -> FK