我正在对现有数据库进行升级,该数据库的设计没有任何代码来实现正在考虑的设计。现在我在用代码实现数据库设计方面遇到了瓶颈。我确定这是否是数据库设计的问题,或者我只是没有看到关于如何完成需要完成的事情的正确解决方案。
基本逻辑规定如下:
- 用户通过 Seats 访问在线培训。用户可以拥有多个席位。
- 席位由公司购买,与 Products 具有多对多关系。
- 产品与模块之间存在多对多关系。
- 模块与类(class)之间存在多对多关系。
- 类(class)是最终用户获得培训的途径。
- 为了混淆水域,出于某种原因,一些用户拥有包含相同产品的多个席位。
- 认证以每个产品为基础,而不是以每个席位为基础。
- 用户与存储他们当前状态或类(class)分数的类(class)存在多对多关系。
- 用户完成产品所有模块中的所有类(class)后,即表示他们获得了产品认证。
- 了解用户何时完成特定模块的所有类(class)也很重要。
- 某些席位将用于重新认证,这意味着之前已通过产品认证的用户可以注册并参加重新认证考试。
- 根据规则 11,用户可以并且将拥有多个认证记录。
- 编辑:当用户完成一节课(得分高于 80%)时,则该用户(根据当前业务逻辑)完成了所有产品和包含该课的所有座位的类(class)。
正如我或多或少所描述的那样,我在当前设计和业务逻辑中不断遇到的问题是,我无法找到一种方法来有效地确定用户是否已通过特定产品和席位的认证与他们没有的时候相比。我一直遇到障碍,试图确定哪些产品的席位已经为用户认证,哪些还没有。部分问题是因为如果他们当前在不同席位下注册了多个相同产品,那么我只需要计算产品一次。
下面是所涉及的架构部分的副本。任何有关如何改进设计或在代码中绘制关联的建议都将不胜感激。以防万一,这个网站是建立在 LAMPP 堆栈上的。
您可以在此处查看数据库模式的相关部分: http://lpsoftware.com/problem_db_structure.png
最佳答案
您要找的是relational division 没有直接用 SQL 实现,但是可以做到。在谷歌上搜索其他示例。
关于php - 关系的数据库设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/163400/