首页 > 解决方案 > PostgreSQL 中一对多两边不为空

问题描述

一对多关系是如何实现的?通常建议执行以下操作:

CREATE TABLE instructor (
  instructor_id integer primary key,
  ...
);

CREATE TABLE course (
  course_id integer primary key,
  instructor_id integer not null references instructor(instructor_id),
  ...
);

虽然这保证了该课程将有一名讲师,但并不能保证该讲师将拥有一门课程。我在此页面中看到了带有业务规则的图纸,据说这是可能的: http ://www2.cs.uregina.ca/~bernatja/crowsfoot.html

我正在尝试在该页面上实现 b9,其中教师必须有 1 门或更多门课程,并且该课程必须由一名教师教授。我尝试向讲师表添加非空外键以及延迟外键来解决插入问题,但课程表中的讲师 ID 不是唯一索引,因此不起作用。我如何保证我的导师有课程?

标签: postgresqldatabase-designerdcardinality

解决方案


我想说这是不可能的,因为您有时需要插入新的讲师或课程。如果是新讲师,则没有课程可以事先参考它,因此您将拥有一个没有课程的讲师 - 反之亦然。

最好的问候, Bjarni


推荐阅读