2

次のデータベースがあります。最初のテーブルusersはユーザーを含むテーブルで、useridは主キーです。

ユーザーテーブル

次は私の結果テーブルです。これで、各ユーザーについて、IDを使用した結果が得られ、試験に反対する可能性があります。このシナリオでは、「id」を主キーとして使用し、「userid」を外部キーとして使用しても大丈夫ですか?このシナリオをモデル化するためのより良い方法はありますか?

結果表

次に、これらは対応する試験にリンクします...

ここに画像の説明を入力してください

4

4 に答える 4

2

私はおそらくuseridとして持っていないでしょうvarchar。私もそれを持っているでしょうint

したがって、ユーザーテーブルは次のようになります。

userId int
userName varchar
firstName varchar
lastName varchar

そして、結果テーブルテーブルのフォアキーは。になりますint。このような:

userId int
result varchar
id int
examid INT

JOINテーブルを一緒にプレイしている場合は、テーブルをプレイするのは、テーブルをプレイJOINするよりもvarchar速くないためです。JOININT

編集

これは、保存する予定のデータの量によって異なります。あなたは、GUIDsがユニークではない最小限のちゃんがいることを知っています。GUIDが一意ではないことの簡単な証明。このデータベースを設計する場合は、intを使用すると思います。GUIDをユーザーIDとして使用するのは少しやり過ぎだと感じるので

于 2012-04-18T10:55:41.547 に答える
1

各ユーザー/試験で1つの結果しか生成されない場合は、結果テーブルのuseridexam列を使用して複合キーを作成できます。

id個人的には、レコードを参照するためにいくつかの値を渡す必要がないので、任意のフィールドアプローチを使用します。しかし、それは私だけです:)。

また、exam結果テーブルのフィールドも外部キーである必要があります。

于 2012-04-18T10:55:18.180 に答える
1

これを行う別の方法は、試験から成績レベルを抽象化し、試験を独自のテーブル上の一意のエンティティ(および主キー)にすることです。したがって、これにより、グレードが2番目のテーブルの外部キーとして機能するグレードレベルテーブル(pkey1 = A、pkey2 = Bなど)が作成され、フィールド全体が削除されます。

また、別のレベルを正規化して、Subjectsのテーブルを作成することもできます。これは、専用のExamCodeテーブルの外部キーになります。試験にはENG101、ENG102などを使用でき、対象の他の試験コードにも同じものを使用できます。これの利点は、試験、科目、学生、および成績レベルを一意のエンティティとして維持することです。それぞれの主キーと外部キーは明らかであり、スケールアップの余地がある簡単なメンテナンスの将来を維持します。

複合キーの使用を検討することもできますが、これは開始するのに便利で簡単な方法であり、必要に応じてテーブルをマージしてインデックス作成と圧縮を行うことができます。

于 2012-04-18T11:12:08.110 に答える
1

スキーマを実際に正規化する前に、まず正規化フォームを理解していることを確認してください。

于 2012-04-18T11:45:40.120 に答える