防止列在记录中具有相同的值

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)

有谁知道我将如何做到这一点?先感谢您。

a_h*_*ame 6

这称为“多对多”关系。一个人可以是多个团队的成员,一个团队可以有多个成员。对此建模的一种方法可能是:

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)