0

SQL データベースのテーブル/フィールドに最適な編成を見つけようとしています。

製品の機能について説明します。私の組織は、毎日異なる時間に週 5 日、ボランティア サービスを予定しています。ユーザーがログインし、ボランティア活動の日時を選択し、選択した時間にボランティア登録できるようにするプログラムを作成しています。ユーザーは、ボランティアの人数と車の台数を選択します。ボランティアの外出ごとに最低2台の車と3人がいます。ユーザーは承認済みリストに含まれている必要があります。

このすべてのデータを最適に整理する方法がわかりません。車の番号とボランティアの人数のフィールドをユーザー テーブルに追加できません。これは、サインアップする日によって変わる可能性があるためです。

私の現在の考え(悪い):

VolunteerOutings テーブル

- DateTime time
- Array of userIds (will be used to access CarVolunteerInfo)

ユーザー テーブル

- int userId
- varchar email
- varchar pass

CarVolunteerInfo テーブル

- DateTime time
- int userId
- int car #
- int volunteer #

1回の外出に複数人で申し込めますが、外出ごとに誰が申し込んでいて、何を持ってきているかを確認できるようにしたいです。また、レポートを実行して、サインアップした過去および将来の外出をすべて確認できるようにしたいと考えています。

この質問が漠然としていたり​​、理論的すぎる場合は申し訳ありません。ご要望に応じて質問を改善させていただきます。

4

1 に答える 1

2

3 つの経験則:

  1. シンプルな要素に分解する
  2. ユーザーの視点からサンプル ワークフローと照合する
  3. 情報が重複しないように注意してください

つまり、明らかに次のようなものがあります: ユーザー、外出、車両、そしておそらくプロジェクト (複数の外出で進行中のもの)。次に、リンク テーブル (出席者 = 外出、ユーザーなど) が作成されます。

次に、詳細に入ります。これらの車両 - 1 人のユーザーがそれぞれを持ち込む責任がありますか? それらはどのくらいの大きさですか?# ユーザーが参加するのに十分な座席があることを確認する必要がありますか? 誰が各車に乗っているか気にしますか?

最後に、情報が重複していないことを確認してください。Dave の名前は彼のユーザー ID から調べることができます。また、彼の車の座席数は、おそらく外出ごとに変わることはありません (彼が車を変えるまでは... おっと、それをワークフローに追加してください)。

あなたのサンプルは最初のドラフトには問題ないように見えますが、それを改良するプロセスを数回経験することを期待してください. ああ - 可能であれば、いくつかのスクリプトを用意してください:

  1. テーブル定義の生成
  2. いくつかのテスト データを追加します。
  3. データベースに対して基本的なテストを実行する

それは大いに役立ちます。PostgreSQL を使用している場合、 pgtapのようなものがテストに役立ちます。

于 2012-08-11T08:04:32.000 に答える