我正在对现有数据库进行升级,该数据库的设计没有任何代码来实现正在考虑的设计。现在我在用代码实现数据库设计方面遇到了障碍。我确定这是否是数据库设计的问题,或者我只是没有看到关于如何做的正确解决方案。
基本逻辑规定如下:
- 用户通过席位访问在线培训。用户可以拥有多个席位。
- 席位由公司购买,并与产品具有多对多关系。
- 产品与模块具有多对多关系。
- 模块与课程具有多对多关系。
- 课程是最终用户进行培训的访问权限。
- 为了搅浑水,出于某种原因,一些用户有多个包含相同产品的席位。
- 认证是基于每个产品进行的,而不是基于每个席位。
- 用户与存储其当前状态或课程分数的课程具有多对多关系。
- 用户在完成该产品的所有模块中的所有课程后,即可对产品进行认证。
- 了解用户何时完成特定模块的所有课程也很重要。
- 一些席位将用于重新认证,这意味着之前通过产品认证的用户可以注册并参加重新认证考试。
- 由于规则 11,用户可以并且将会拥有多个认证记录。
- 编辑:当用户完成课程(得分高于 80%)时,用户已(根据当前业务逻辑)完成了所有产品和包含课程的所有席位的课程。
正如我或多或少所描述的那样,我在当前设计和业务逻辑上一直遇到的问题是,我无法找到一种方法来有效地将用户是否已获得特定产品和席位的认证与他们何时获得认证没有。我一直在尝试确定哪些产品下的哪些座位已获得用户认证,哪些没有。部分问题是因为如果他们目前在不同席位下注册了多个相同产品,那么我只需要计算一次产品。
下面是所涉及的架构部分的副本。任何有关如何改进设计或在代码中绘制关联的建议将不胜感激。万一这很重要,这个网站是建立在 LAMPP 堆栈上的。
您可以在此处查看数据库架构的相关部分:http://lpsoftware.com/problem_db_structure.png