【问题标题】:Modeling a many-to-many relationship建模多对多关系
【发布时间】:2016-10-21 16:39:45
【问题描述】:

我有两张桌子,桌子ProjectUser。下面是这两张表的关系

一个项目可以与多个用户关联
一个用户可以操作多个项目

我已经创建了下面的实体关系。这是表示多对多关系的正确方法吗?

User:
    id
    name
    email

Project:
    id
    name

User_Project: 
    user_id
    project_id

【问题讨论】:

    标签: database postgresql


    【解决方案1】:

    可以,前提是您定义了外键关系 (user_id) REFERENCES "user"(id)(project_id) REFERENCES project(id) 以及 PRIMARY KEY (user_id, project_id)

    顺便说一句,尽量避免在表名和列名中混合大小写和保留关键字。

    【讨论】:

      【解决方案2】:

      你的方法是正确的。

      因为用户可以加入多个项目,所以需要添加一个联结表。

      联结表还可以包含其他列。

      在您的情况下,了解用户何时加入项目可能很有用。 因此,您可以在存储该信息的位置添加一列 join_date

      create table users
      (
        id            serial,
        name          text,
        email         text,
      
        primary key (id) 
      );
      
      create table projects
      (
        id            serial,
        name          text,
      
        primary key (id)    
      );
      
      create table users_projects
      (
        user_id       int,
        project_id    int,
        join_date     date,
      
        primary key (user_id, project_id),
        foreign key (user_id) references users (id),
        foreign key (project_id) references projects (id)
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-25
        • 2018-03-28
        • 2019-03-02
        • 1970-01-01
        • 1970-01-01
        • 2017-01-02
        相关资源
        最近更新 更多