【问题标题】:Relational schema and integrity constraints?关系模式和完整性约束?
【发布时间】:2021-05-16 00:05:51
【问题描述】:

请问您是否可以使用约束来设置限制,以便一名成员(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

【问题讨论】:

    标签: postgresql foreign-keys relational-database


    【解决方案1】:

    你不需要:

    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。

    【讨论】:

      猜你喜欢
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      相关资源
      最近更新 更多