See*_*erC 1 postgresql database-design
我正在使用 PostgreSQL 10。我想要一个表,允许在列中使用相同的值,但不允许在行中使用。我创建的表:
CREATE TABLE teams
(
team_id SERIAL PRIMARY KEY
team_lead character varying(250) NOT NULL,
member1 character varying(250) NOT NULL,
member2 character varying(250),
member3 character varying(250)
)
Run Code Online (Sandbox Code Playgroud)
这将被允许:
CREATE TABLE teams
(
team_id SERIAL PRIMARY KEY
team_lead character varying(250) NOT NULL,
member1 character varying(250) NOT NULL,
member2 character varying(250),
member3 character varying(250)
)
Run Code Online (Sandbox Code Playgroud)
这不会:
| team_lead | member1 | member2 |
------------------------------------------------
| Jane Doe | Bill Smith | Shirley Green |
| Jane Doe | Carol Lewis | John Doe |
Run Code Online (Sandbox Code Playgroud)
有谁知道我将如何做到这一点?先感谢您。
这称为“多对多”关系。一个人可以是多个团队的成员,一个团队可以有多个成员。对此建模的一种方法可能是:
create table person
(
person_id integer primary key,
name text not null
);
create table team
(
team_id integer primary key,
name text not null
);
create table team_member
(
team_id integer not null references team,
person_id integer not null references person,
person_role text not null check (team_role in ('lead', 'member')),
-- each person can only be assigned to a team once
primary key (team_id, person_id)
);
Run Code Online (Sandbox Code Playgroud)