我想在两个或多个表之间创建一个联接表。
table是学生的,当然是。
将注册联接表。
商业规则是一个学生一次只能参加一门课程。
我要阻止用户在课程中注册1次后创建其他注册。
我不知道这将是什么类型的禁忌,或者它是否可能。
有人能帮忙吗?
谢谢您
注意:我不认为可以创建一个主键作为另一个表的主键,即student表的studentid。如果可以,我会的。我想是违反了规则。这将是一个外键,它不是唯一的。
如果业务规则应该被忽略,并且假设一个学生一次自然只参加一门课程。。也许我会停止担心。。。
我想在两个或多个表之间创建一个联接表。
table是学生的,当然是。
将注册联接表。
商业规则是一个学生一次只能参加一门课程。
我要阻止用户在课程中注册1次后创建其他注册。
我不知道这将是什么类型的禁忌,或者它是否可能。
有人能帮忙吗?
谢谢您
注意:我不认为可以创建一个主键作为另一个表的主键,即student表的studentid。如果可以,我会的。我想是违反了规则。这将是一个外键,它不是唯一的。
如果业务规则应该被忽略,并且假设一个学生一次自然只参加一门课程。。也许我会停止担心。。。
3条答案
按热度按时间py49o6xq1#
每个表可以有一个主键。两个表可以定义相同的主键(但是实现取决于实体关系模型,我们对实体和实体之间关系的发现。
根据问题中提供的信息,注册表的可能实现:
外键列的数据类型必须与引用列的数据类型匹配;在这个例子中,我假设主键列
id
两者都有student
以及course
,定义为数据类型INT UNSIGNED
在本例中,主键约束对(student_id,course_id)
. 尝试插入第二个注册(同一课程中的同一个学生)将是一个重复的行,这将引发约束冲突,从而阻止添加该行。如果
enrollment
结果是模型中的一个实体,有自己的属性,我会选择添加一个单独的id
列作为代理主键,对(student_id,course_id)
```CREATE TABLE current_enrollment
( id INT UNSIGNED NOT NULL COMMENT 'pk'
, student_id INT UNSIGNED NOT NULL COMMENT 'fk ref student.id'
, course_id INT UNSIGNED NOT NULL COMMENT 'fk ref course.id'
, enrollment_dt DATETIME
, status VARCHAR(8)
, approval_by VARCHAR(8)
, PRIMARY KEY (id)
, CONSTRAINT current_enrollment_UX1 UNIQUE KEY (student_id, course_id)
, CONSTRAINT FK_currrent_enrollment_student FOREIGN KEY ( student_id )
REFERENCES student (id) ON UPDATE CASCADE ON DELETE RESTRICT
, CONSTRAINT FK_currrent_enrollment_course FOREIGN KEY ( course_id )
REFERENCES course (id) ON UPDATE CASCADE ON DELETE RESTRICT
)
llmtgqce2#
可以在联接表中创建唯一索引。
在上创建唯一索引名称
your_join_table
(学生ID);vyswwuz23#
你可以为id\u学生创建一个唯一的索引,但是如果学生以后尝试注册其他课程,这会带来问题。您应该将id\u过程包含到unique约束中。
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE(studentId, course_id)
另一个解决方案是创建一个触发器。触发器应该是“插入前”触发器。如果表中没有,这个应该在表中搜索与学生相关的信息´先有信息再插入信息,否则什么也不做。
CREATE TRIGGER 'ONE_STUDENT_PER_COURSE' BEFORE INSERT ON 'Enrollments' FOR EACH ROW BEGIN DECLARE student_id INT; SELECT n.id_student INTO student_id FROM table_enrollments n
````IF student_id IS NULL THEN
/* I DON´T REALLY KNOW EXACTLY THE SINTAXIS FOR INSERTING DATA OF THE BEFORE INSERT FOR YOU VERSION OF MYSQL
BUT TRY THIS ONE
*/
INSERT INTO table_enrollments (student_id, course_id) SELECT student_id, course_id FROM inserted
END IF;