0

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

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

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,它有附件,是否意味着要在 attachments_tbl 中添加另一个 FK?

有没有其他更简单更好的方法来做同样的事情?

4

2 回答 2

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 小提琴

于 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 回答