2012-03-29 3 views
0

私はオンラインWebサイトを開発しています(DjangoとMysqlを使用しています)。私はテストテーブルとユーザーテーブルを持っています。データベースに保存する正しい方法

私はテーブル内で50回のテストを行い、各ユーザーはそれぞれのペースでテストを完了します。 テストのステータスをデータベースに保存するにはどうすればよいですか?

私の頭に浮かべた1つのアイデアは、Userテーブルに追加の列を作成することです。 testidを含むその列はカンマまたは他の区切り文字で区切られます。

 
userid | username | testscompleted 
1  john  1, 5, 34 
2  tom  1, 10, 23, 25 

もう1つのアイデアは、useridとtestidを格納する別個のテーブルを作成することでした。だから、私はわずか2列しかないが何千もの行を持つだろう(テストはない*ユーザーはいない)、彼らは常に増加し続けるだろう。

 
userid | testid 
1  1 
1  5 
2  1 
1  34 
2  10 

答えて

0

あなたの第二の選択肢は非常に...あなたの最初のソリューションは、あなたが道を頭痛原因となる単一のフィールドに複数の値を格納しようとすることでnormalization rulesを破ることが好ましいです。

2つ目のテーブルは、値の追加や削除を行うときに維持しやすくなるだけでなく、それらの列を効果的にインデックスできるため、パフォーマンスが向上します。

0

データベースデザインの考え方を自動的に無効にする2つのフレーズがあります。

  • [何か]
  • [何か]カンマ

個別のテーブルによって分離された2つの列を含む列ごとに一つのテーブル作成 - が正しい軌道にyou'reを。

+0

ですが、テーブルのサイズが大きくなる原因になります。公開サイトであり、すべてのユーザー(たとえば10000)が最終的にテストを完了すると仮定すると、10000×50行が存在します。 – John

+0

@ジョン50万行は多くのように思えますが、それでもデータベース標準では非常に小さなテーブルです。各行が3つのint列で構成されているとします。それは1行あたり12バイトです。 12バイト* 500k行は* 5.7MB *です。 –

+0

@ John:テーブルは、役に立つデータを入れると成長すると考えられています。 –

関連する問題