私はデータベースの設計を開発する準備段階にあります。
これが私のジレンマです。現在、データベース内に入力する必要のある約150以上のフィールドの概要を説明しましたが、通常の正規化ルールに従って、フィールドをリンクされた有効なテーブルに分割する方法を決定するのに苦労しています。
私が一人の兵士について収集している情報の抜粋をあなたに与えるためだけに:
- 個人情報(氏名、行政番号、宗教、出生地、近親者など)
- 家族(親、子供、兄弟)
- 学歴(学校を卒業した年齢、最高学年に達した、大学/大学、貿易/見習い、話された/書かれた言語など)
- 職歴(過去の職歴、雇用主の氏名、特定の職業、退院後の保証された仕事、農業経験など)
- 病歴(年齢、目/髪の色、身長、体重、顔色、傷跡、視力、聴覚など)
- 健康診断(骨折歴、以前の頭部外傷-脊髄のトラブル-破裂-結核-喘息、血圧、他の多くの状態など)
- 連隊の歴史(入隊日、入隊時の連隊、参加した他の連隊、最高ランクなど)
- 兵士の場所(兵士が生まれ、入隊、訓練、戦場、死から来たすべての重要な場所のリスト)
- 埋葬情報(死亡日、死亡場所、墓地、墓地など)
明らかに、1人の兵士について収集する必要のある情報がたくさんあります。私の問題は、管理しやすく効率的な方法でテーブルを分割する方法と、それぞれにリストする必要のある主キー/外部キーを決定しようとしていることです。
- 各列が兵士になる巨大なテーブルが1つあると考えるのは非論理的です。
- ロジスティック的には、データベースを上記のようにテーブルに分割する必要があるかもしれませんが、各行でほぼ同じsoldierIDになるため、主キーに何を使用すればよいかわかりません。これにより、テーブルが相互に接続されます( #1と同じではないので、私には正しくないようです?)
- データベースを、相互に指す非常に単純なテーブル(つまり、テーブルごとに2つの列)に分割します。例:Language_Tableには、それぞれが一意のIDで話されたり書かれたりする可能性のあるすべての言語のリストがあります。これは最も理にかなっているように見えますが、膨大な数のテーブルを作成します。
計画では、Azureでデータベースをホストし、最終的にWindowsPhoneアプリにフィードする予定です。