2012-08-02 55 views
1

我正在创建一个涉及上传的系统。现在这些上传需要附加到某种方式,例如。一个消息,一个合同,一个项目与许多不同表格的关系

是否还好有一个表中的附件,然后将它们链接到这些类型的 - 需要提醒的是,它需要被连接到单独的ID从这些类型的

例如。在安装表
类型 - 链接到一个表消息合同等
ID的列表。 - 一个ID的ID什么样的ID类型,所以如果类型是消息那么它将引用message.id,如果它是一个合同,它将引用contract.id

但是那么没有外键检查?但是,必须做外键例如似乎很奇怪。

type 
message_id (FK) 
contract_id (FK) 
project_id (FK) 

编辑:有几个表超过3个像5-6或许更在未来的太..

回答

0

我会建议:

  1. 一种附装表(attachment_id +其他需要为您的附件)
  2. 对于每个可能的类型(消息,合同,项目)的列,你将有一个关系表。

例子:

  • MessageAttachmentTable:MESSAGE_ID(FK),attachment_id(FK)
  • ContractAttachmentTable:contract_id(FK),attachment_id(FK)

这样一来,就可以拥有所有数据库完整性约束,没有未使用的列。与外键的相应表

+0

这似乎是不必要的复杂的东西 – Andreas 2012-08-02 05:24:16

0

三个可为空领域在我看来是最明智的做法。

此外,如果你有三家外资重点领域,你甚至不必存储“型”,因为它是由这不是空的外键字段确定。

+0

感谢您的答复 - 我没有提到可能有几个列3只是一个例子,我做了这样的解决方案,但在想,我不认为它会扩展以及作为LMC的 – Keiiz 2012-08-02 06:33:08

+0

这种改进从何而来?您将拥有一个包含两列的表格来创建链接,而不是现有表格中的一列。此外,如果您有100个附件,则将有200行,附件表中有100行,另有100行遍布链接表(而不是附件表中的100行)。 – Andreas 2012-08-02 09:03:59

+0

安德烈亚斯你好,感谢您的答复 - 我仍然很新的MySQL的 - 如果我有200行该表..我怎么找非空FK没有一个荒谬的选择? – Keiiz 2012-08-02 13:23:05