2013-01-16 73 views
0

我有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 

因爲我建立了一個圖片上傳的方式,用戶可以在將問題提交到db之前將圖像上傳到問題中,因此只有在我的html中確定圖像屬於哪個問題的方法是使用html中的QuestionNo來知道哪個問題將圖像文件上傳爲QuestionId不是直到頁面被提交。

我的問題是有可能有2個非唯一字段作爲外鍵?

此外,如果我只是將SessionId設置爲(FK),並且如果QuestionNo允許(FK),它設置在它自己的標題上,因爲有多個會話使用相同的QuestionNo,如果單擊上面的QuestionNo,它可以在包含QuestionNo的所有會話中顯示相同QuestionNo的行。

我的其他問題將是如何SessionIdQuestionNo(FK)結合起來,這樣,如果我QuestionNo搜索下,它搜索的相關SessionIdQuestionNo?如果我點擊SessionId,那麼它會顯示SessionId的詳細信息,以便確定。

回答

0

我覺得你的問題有點難以理解,但是從我可以收集的信息來看,你正在使用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. 如果用戶使用標記值提交問題,則將條目置於問題表中並分配標識。 TempImage表中共享令牌的所有圖像都會使用當前已知的QuestionId插入到圖像表中。然後刪除SessionQuestionToken條目並級聯刪除TempImage中的臨時圖像。
  5. 其他用戶不提交問題,則刪除文件並刪除SessionQuestionToken條目。

至於你的問題,如果外鍵仍然可以引用非唯一列,答案是肯定的。

0

您可以在表中引用多個外鍵。只要確保你的主鍵是唯一的。

相關問題