【发布时间】:2021-08-03 00:54:11
【问题描述】:
请问是否可以使用创建脚本在此架构上创建这些完整性约束?
- 俱乐部 (klub) 只能有一名教练 (trener)
- 俱乐部只能有一位所有者 (majitel)
- 每个成员 (člen) 只能加入一个俱乐部
- 教练只能为他的俱乐部设置战术 (taktika)?
是否可以通过创建脚本中的完整性约束来解决这个问题,或者是否使用触发器来解决这个问题?我是我的创建脚本的一部分。
架构
创建脚本
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
【问题讨论】:
-
您写道,俱乐部应该只有一个
trener,但在您的架构中,您只有一个与clen关联的教练。clen还分配了一个俱乐部。问题是您是否希望对clen表进行约束以限制进入具有相同俱乐部但不同培训师的 2 名成员,或者您是否允许在您的表中添加新列(特别是klub)。 -
但是如果我在俱乐部里加了一个专栏,我还是得看看它,这样我就不会再加教练了。
-
我再次查看了架构 - 我看到
trener有字段id_clen。这应该解释为“教练是会员”? -
成员可以是球员、教练或老板...... r 任何功能组合,同时所有三个......但不能有更多的团队......同时每支球队必须只有一名教练和一名老板
标签: sql postgresql database-design foreign-keys