Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql DB设计多对多关系_Mysql_Sql_Database_Database Design - Fatal编程技术网

Mysql DB设计多对多关系

Mysql DB设计多对多关系,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,我正在为一家服务提供商设计数据库结构。以下是我到目前为止的情况: +---------+ +----------+ +-----------------+ +-----------------+ | User | | Order | | OrderItems | | Subscription | +---------+ +----------+ +-----------------+ +-----------------+ | user_id +--

我正在为一家服务提供商设计数据库结构。以下是我到目前为止的情况:

+---------+  +----------+  +-----------------+  +-----------------+
| User    |  | Order    |  | OrderItems      |  | Subscription    |
+---------+  +----------+  +-----------------+  +-----------------+
| user_id +--+ order_id +--+ order_id        +--+ subscription_id |
+---------+  | user_id  |  | subscription_id |  | user_id         |
             +----------+  +-----------------+  | service_plan_id |
                                                +--------+--------+
                                                         |
 +------------------+   +-------------------+   +--------+--------+
 | ServiceGroup     |   | ServicePlanAccess |   | ServicePlan     |
 +------------------+   +-------------------+   +-----------------+
 | service_group_id +---+ service_plan_id   +---+ service_plan_id |
 +------------------+   | service_group_id  |   +-----------------+
                        +-------------------+
  • 我应该从表订阅中删除用户id吗?这似乎是多余的,但在没有多个表联接的情况下,可能更容易获得用户的活动订阅
  • 服务组和服务计划之间存在差异-服务组定义了对服务a或B的直接访问。服务计划可能包括多个服务组,因此授予对多个服务的访问权(例如访问a+B)。下面是一个示例,其中计划3允许访问组1和组2:

    +--------------------+
    | ServicePlanAccess  |
    +--------------------+
    | plan_id | group_id |
    +--------------------+
    | 1       | 1        |
    | 2       | 2        |
    | 3       | 1        |
    | 3       | 2        |
    +--------------------+
    
    二,。这是一个合理的数据库设计,可以改进吗?

    1)在订阅表中保留用户id。2) 现在,表的定义使得每个订阅都有一个服务计划,该计划可以有一个或多个服务组。如果您希望订阅可以直接访问服务组,而不需要服务计划,则需要多个连接表来将订阅与服务组联系起来。在架构设计中,冗余通常是不好的。这是不好的,因为很容易使两个用户id副本不同步。