Mysql 十对零对多关系SQL
所以,我试图创建一个模型。我需要零到十个学生注册到零到多个课程。这是如何建模的?我很难理解如何在mysql中实现10的限制,或者它是通过数据库模型实现的?通常,您会在连接关系类型/类符号到参与实体类型/类符号的每一行的实体端写0..10。我们称之为(0-to-10):(0-to-10)关系。有些方法分别注释M:N或0-to-M:0-to-N加上最大M&N。您需要告诉我们您使用的方法/产品 在MySQL中,您需要通过以下方式强制实现这一点。由于参与者不能少于0人,因此只需限制最大人数。删除不能超过最大值。插入或更新给定学生或班级的行时,要求相关的BEFORE COUNT小于10。一个学生“实体”表 一个课程“实体”表 一个“关系”表,列出哪些学生正在学习哪门课程。(多对多)Mysql 十对零对多关系SQL,mysql,database,database-design,foreign-keys,relationship,Mysql,Database,Database Design,Foreign Keys,Relationship,所以,我试图创建一个模型。我需要零到十个学生注册到零到多个课程。这是如何建模的?我很难理解如何在mysql中实现10的限制,或者它是通过数据库模型实现的?通常,您会在连接关系类型/类符号到参与实体类型/类符号的每一行的实体端写0..10。我们称之为(0-to-10):(0-to-10)关系。有些方法分别注释M:N或0-to-M:0-to-N加上最大M&N。您需要告诉我们您使用的方法/产品 在MySQL中,您需要通过以下方式强制实现这一点。由于参与者不能少于0人,因此只需限制最大人数。删除不能超过
没有参加任何课程的学生将不在多对多表中。(抵制课程也是如此。)你可以通过一个交叉表来实现这一点,该交叉表设计为每个课程最多只包含10个条目
create table CourseStudent(
CourseID int not null,
StudentID int not null,
Card smallint not null,
constraint PK_CourseStudent primary key( CourseID, StudentID ),
constraint CK_CourseCardinality check( Card between 1 and 10 ),
constraint UQ_CourseCardinality unique( CourseID, Card )
);
课程表和学生表也会有外键定义,但让我们看看我们有什么
对于任何课程,最多可以有十个条目,并且任何课程的学生不得超过一次
这种设计的弱点是卡值必须在1到10之间,并且无法自动生成,因此应用程序必须处理该值,但在应用程序代码中很容易处理。差距也是可能的,但这不应该是一个问题。卡的价值不应该暴露给用户,这样就不会有什么不对劲的地方
但是,这允许您强制执行10:n基数。我认为您无法在db中对此进行建模。0-1关系也会出现同样的问题。