可以的,如果这两个领域都是非唯一一个外键产生的呢?(Can a foreign key be cre

2019-08-07 01:18发布

我有2个数据库表下面我想创造的:

问表:

QuestionId(PK)  QuestionNo  QuestionContent  SessionId (FK)
11              1           Question1        3    
12              2           Question2        3
13              3           Question3        3

Image_Question

ImageId (PK)  SessionId (Fk)  QuestionNo (FK)
1              3               1
2              3               2

因为这样,我成立了一个图片上传,用户可以将图片上传到这个问题之前,一个问题被提交到数据库,所以只能以确定的方式属于我的HTML是使用QuestionNo在html质疑图像知道哪些问题上传的图像文件,直到提交页面没有输入QuestionId。

我的问题是有可能有2个非独特的领域外键?

另外,如果我只是设置会话ID为自身(FK),如果QuestionNo允许(FK),它被设置在了自己的THN prblem我这么有具有相同的多个会话QuestionNo ,如果我在点击QuestionNo以上,它可能为同一显示行QuestionNo包含在所有会话QuestionNo

我的另一个问题将是如何结合SessionIdQuestionNo这样,如果我搜索下(FK) QuestionNo ,查找其中QuestionNo在相关SessionId ? 如果我点击SessionId然后显示细节为SessionId ,这样就可以了。

Answer 1:

我觉得你的问题有点难以理解,但使用的是什么,我可以收集QuestionNo作为临时令牌几个HTTP请求链接在一起(图片上传+问题后)。

我建议是这样的:

SessionQuestionToken
{
  Token
  SessionId
}

Image
{
  ID
  QuestionId FK references Question(Id)
  ImageName
}

Question
{
  Id
  Content
}

TempImage
{
  Token FK references SessionQuestionToken(token)
  ImageName
}

而像这样的逻辑:

  1. 用户请求质疑形式。 服务器设置令牌,包括响应用户。
  2. 用户上传的图片,包括令牌。 的图像存储在临时表中。
  3. 步骤2重复n次。
  4. 如果用户提交的问题与令牌值,入口被放置在问题表和ID分配。 在TempImage表共享令牌的所有图像得到插入到图像表与现在已知QuestionId。 然后SessionQuestionToken项目被删除,级联删除TempImage临时图像。
  5. 否则,用户不提交问题,然后删除文件和SessionQuestionToken项中删除。

至于你的问题,如果外键仍可以参照非唯一列,答案是肯定的。



Answer 2:

您可以在表中引用多个外键。 只要确保你的主键是唯一的。



文章来源: Can a foreign key be created if both fields are non unique?
标签: mysql sql mysqli