Mysql 如果两个字段都不唯一,是否可以创建外键?

Mysql 如果两个字段都不唯一,是否可以创建外键?,mysql,database-design,Mysql,Database Design,我正在考虑创建以下2个数据库表: 问题表: QuestionId(PK) QuestionNo QuestionContent SessionId (FK) 11 1 Question1 3 12 2 Question2 3 13 3 Question3 3 形象问题 ImageId (PK) Ses

我正在考虑创建以下2个数据库表:

问题表:

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

ImageId (PK)  SessionId (Fk)  QuestionNo (FK)
1              3               1
2              3               2
由于我设置图像上载的方式,用户可以在问题提交到db之前将图像上载到问题,因此确定图像在我的html中属于哪个问题的唯一方法是使用html中的问号来知道哪个问题上载了图像文件,因为在提交页面之前不会输入问号

我的问题是,是否可以将两个非唯一字段作为外键

另外,如果我只是将SessionId单独设置为(FK),如果QuestionNo允许(FK),那么它是单独设置的,因为有多个会话具有相同的
QuestionNo
,如果我单击上面的
QuestionNo
,它可以在包含该
QuestionNo
的所有会话中显示相同
QuestionNo
的行


我的另一个问题是如何组合
SessionId
QuestionNo
(FK),这样如果我在
QuestionNo
下搜索,它会在相关的
SessionId
中搜索该
QuestionNo
?如果我点击
SessionId
,它会显示该
SessionId
的详细信息,这样就可以了。

我发现你的问题有点难以理解,但据我所知,你使用QuestionNo作为临时标记,将几个http请求链接在一起(图像上传+问题帖子)

我建议如下:

SessionQuestionToken
{
  Token
  SessionId
}

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

Question
{
  Id
  Content
}

TempImage
{
  Token FK references SessionQuestionToken(token)
  ImageName
}
逻辑是这样的:

  • 用户请求问题表单。服务器设置令牌并包括对用户的响应
  • 用户上载包含令牌的图片。图像存储在临时表中
  • 步骤2重复n次
  • 如果用户提交带有标记值的问题,则在问题表中放置一个条目,并分配一个id。TempImage表中共享令牌的所有图像都将以现在已知的QuestionId插入到图像表中。然后删除SessionQuestionToken条目,并级联删除TempImage中的临时映像
  • 否则用户不提交问题,则删除文件并删除SessionQuestionToken条目

  • 至于外键是否仍然可以引用非唯一列的问题,答案是肯定的。

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