検討中の設計を実装するためのコードを一切使用せずに設計された既存のデータベースのアップグレードに取り組んでいます。今、私はデータベース設計をコードで実装するという点で壁にぶつかりました。データベースの設計に問題があるのか、それとも、何をする必要があるのかについて正しい解決策が見当たらないだけなのかどうかは確かです。
基本的なロジックでは、次のように規定されています。
- ユーザーは、シートを介してオンライントレーニングにアクセスします。ユーザーは複数のシートを持つことができます。
- シートは企業によって購入され、製品と多対多の関係があります。
- 製品は、モジュールと多対多の関係にあります。
- モジュールは、レッスンと多対多の関係にあります。
- レッスンは、エンドユーザーがトレーニングのためにアクセスするものです。
- 水を濁らせるために、何らかの理由で、一部のユーザーは同じ製品を含む複数のシートを持っています。
- 認定は、シートごとではなく、製品ごとに行われます。
- ユーザーは、レッスンの現在のステータスまたはスコアを保存するレッスンと多対多の関係を持っています。
- ユーザーは、製品のすべてのモジュールのすべてのレッスンを完了すると、製品の認定を受けます。
- 特定のモジュールのすべてのレッスンがユーザーによっていつ完了するかを知ることも重要です。
- 一部のシートは再認定用になります。つまり、以前に製品の認定を受けたユーザーは、サインアップして再認定試験を受けることができます。
- ルール11により、ユーザーは複数の認証レコードを持つことができます。
- 編集:ユーザーがレッスンを完了すると(スコアが80%を超える)、ユーザーは(現在のビジネスロジックに従って)レッスンを含むすべての製品とすべてのシートのレッスンを完了します。
私が多かれ少なかれ説明したように、現在の設計とビジネスロジックで遭遇し続ける問題は、ユーザーが特定の製品とシートの認定を受けているかどうかと、それらがいつ認定されているかを効果的に結び付ける方法が見つからないことです。してない。私は、どのシートがユーザーに対して認定されているか、どの製品が認定されていないかを確認しようと、ひっかかりを続けています。問題の一部は、それらが現在異なるシートの下で同じ製品の複数に登録されている場合、製品を1回だけカウントする必要があるためです。
以下は、関連するスキーマの部分のコピーです。デザインを改善する方法やコードで関連付けを描画する方法についての提案をいただければ幸いです。重要な場合、このサイトはLAMPPスタック上に構築されています。
ここでデータベーススキーマの関連部分を表示できます。http://lpsoftware.com/problem_db_structure.png