0

以下に 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

画像のアップロードを設定する方法により、ユーザーは質問がデータベースに送信される前に画像を質問にアップロードできるため、html で画像がどの質問に属しているかを判断する唯一の方法は、html で QuestionNo を使用してページが送信されるまで QuestionId が入力されないため、どの質問が画像ファイルをアップロードしたかがわかります。

私の質問は、2 つの一意でないフィールドを外部キーとして持つことは可能ですか?

また、SessionId を単独で (FK) として設定し、QuestionNo が (FK) を許可する場合、それが独自の thn 問題に設定されている場合、同じセッションが複数あるため、上記QuestionNoをクリックすると、その を含むすべてのセッションでQuestionNo同じ行を表示します。QuestionNoQuestionNo

私の他の質問は、SessionIdand QuestionNo(FK) を組み合わせて、 の下QuestionNoで検索するとQuestionNo、関連するSessionId?でそれを検索する方法です。をクリックすると、SessionIdその詳細が表示されるSessionIdので問題ありません。

4

2 に答える 2

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. ユーザーがトークン値で質問を送信すると、エントリが質問テーブルに配置され、ID が割り当てられます。トークンを共有する TempImage テーブル内のすべての画像は、既知の QuestionId を使用して画像テーブルに挿入されます。その後、SessionQuestionToken エントリが削除され、cascade によって TempImage 内の一時イメージが削除されます。
  5. それ以外の場合、ユーザーが質問を送信しないと、ファイルが削除され、SessionQuestionToken エントリが削除されます。

外部キーがまだ一意でない列を参照できるかどうかという質問については、答えはイエスです。

于 2013-01-16T03:24:44.017 に答える
0

テーブルで複数の外部キーを参照できます。主キーが一意であることを確認してください。

于 2013-01-16T03:29:24.440 に答える