关系模式和完整性约束?
Relational schema and integrity constraints?
请问是否可以使用constraint来设置limited,让一个会员(clen)只能为一个俱乐部(klub)效力?我的意思是这不会发生,例如:id_member = 1 && id_club = 1; ...., id_member = 1 && id_club = 2;
我所拥有的似乎并不完全适合我,我发现它不能解决这个问题。
ALTER TABLE member ADD CONSTRAINT unq_member_and_club UNIQUE(id_member, id_club);
是否可以通过创建脚本中的完整性约束来解决这个问题,或者是否使用了触发器?我是我的创建脚本的一部分。
架构
创建脚本
CREATE TABLE club (
id_club SERIAL NOT NULL,
nazev VARCHAR(256) NOT NULL,
datum_zalozeni VARCHAR(256) NOT NULL
);
ALTER TABLE club ADD CONSTRAINT pk_club PRIMARY KEY (id_club);
ALTER TABLE club ADD CONSTRAINT uc_club_nazev UNIQUE (nazev);
CREATE TABLE coach (
id_member INTEGER NOT NULL
);
ALTER TABLE coach ADD CONSTRAINT pk_coach PRIMARY KEY (id_member);
CREATE TABLE member (
id_member SERIAL NOT NULL,
id_club INTEGER NOT NULL,
jmeno VARCHAR(256) NOT NULL,
prijmeni VARCHAR(256) NOT NULL,
narodnost VARCHAR(256) NOT NULL,
datum_narozeni VARCHAR(256) NOT NULL
);
ALTER TABLE member ADD CONSTRAINT pk_member PRIMARY KEY (id_member);
CREATE TABLE owner (
id_member INTEGER NOT NULL
);
ALTER TABLE owner ADD CONSTRAINT pk_owner PRIMARY KEY (id_member);
CREATE TABLE player (
id_member INTEGER NOT NULL,
cislo VARCHAR(256) NOT NULL,
post VARCHAR(256) NOT NULL
);
ALTER TABLE player ADD CONSTRAINT pk_player PRIMARY KEY (id_member);
ALTER TABLE coach ADD CONSTRAINT fk_coach_member FOREIGN KEY (id_member) REFERENCES member (id_member) ON DELETE CASCADE;
ALTER TABLE member ADD CONSTRAINT fk_member_club FOREIGN KEY (id_club) REFERENCES club (id_club) ON DELETE CASCADE;
ALTER TABLE owner ADD CONSTRAINT fk_owner_member FOREIGN KEY (id_member) REFERENCES member (id_member) ON DELETE CASCADE;
ALTER TABLE player ADD CONSTRAINT fk_player_member FOREIGN KEY (id_member) REFERENCES member (id_member) ON DELETE CASCADE;
enter code here
enter code here
您不需要:
ALTER TABLE member ADD CONSTRAINT unq_member_and_club UNIQUE(id_member, id_club);
因为id_member
是member
的PK,所以id_member = 1
只有一条记录,所以id_member = 1
不可能同时有id_club = 1 and = 2
.任何 id_member
.
都会发生这种情况
请问是否可以使用constraint来设置limited,让一个会员(clen)只能为一个俱乐部(klub)效力?我的意思是这不会发生,例如:id_member = 1 && id_club = 1; ...., id_member = 1 && id_club = 2; 我所拥有的似乎并不完全适合我,我发现它不能解决这个问题。
ALTER TABLE member ADD CONSTRAINT unq_member_and_club UNIQUE(id_member, id_club);
是否可以通过创建脚本中的完整性约束来解决这个问题,或者是否使用了触发器?我是我的创建脚本的一部分。
架构
创建脚本
CREATE TABLE club (
id_club SERIAL NOT NULL,
nazev VARCHAR(256) NOT NULL,
datum_zalozeni VARCHAR(256) NOT NULL
);
ALTER TABLE club ADD CONSTRAINT pk_club PRIMARY KEY (id_club);
ALTER TABLE club ADD CONSTRAINT uc_club_nazev UNIQUE (nazev);
CREATE TABLE coach (
id_member INTEGER NOT NULL
);
ALTER TABLE coach ADD CONSTRAINT pk_coach PRIMARY KEY (id_member);
CREATE TABLE member (
id_member SERIAL NOT NULL,
id_club INTEGER NOT NULL,
jmeno VARCHAR(256) NOT NULL,
prijmeni VARCHAR(256) NOT NULL,
narodnost VARCHAR(256) NOT NULL,
datum_narozeni VARCHAR(256) NOT NULL
);
ALTER TABLE member ADD CONSTRAINT pk_member PRIMARY KEY (id_member);
CREATE TABLE owner (
id_member INTEGER NOT NULL
);
ALTER TABLE owner ADD CONSTRAINT pk_owner PRIMARY KEY (id_member);
CREATE TABLE player (
id_member INTEGER NOT NULL,
cislo VARCHAR(256) NOT NULL,
post VARCHAR(256) NOT NULL
);
ALTER TABLE player ADD CONSTRAINT pk_player PRIMARY KEY (id_member);
ALTER TABLE coach ADD CONSTRAINT fk_coach_member FOREIGN KEY (id_member) REFERENCES member (id_member) ON DELETE CASCADE;
ALTER TABLE member ADD CONSTRAINT fk_member_club FOREIGN KEY (id_club) REFERENCES club (id_club) ON DELETE CASCADE;
ALTER TABLE owner ADD CONSTRAINT fk_owner_member FOREIGN KEY (id_member) REFERENCES member (id_member) ON DELETE CASCADE;
ALTER TABLE player ADD CONSTRAINT fk_player_member FOREIGN KEY (id_member) REFERENCES member (id_member) ON DELETE CASCADE;
enter code here
enter code here
您不需要:
ALTER TABLE member ADD CONSTRAINT unq_member_and_club UNIQUE(id_member, id_club);
因为id_member
是member
的PK,所以id_member = 1
只有一条记录,所以id_member = 1
不可能同时有id_club = 1 and = 2
.任何 id_member
.