2013-07-01 2 views
0

학생 기록을 유지 관리하는 데이터베이스가 있지만 아래의 경우 실패합니다. 1. 특정 "클래스"에 "섹션"이 없으면 아무 것도 없어야합니다 그 "클래스"와 "섹션"의 조합에 대한 학생. 예 : "두 번째"클래스의 모든 학생은 "A"또는 "B"섹션에 속해야합니다. "Second"및 Section "C"에 속하는 학생은 존재할 수 없습니다.부적절한 외래 키 제약

내 데이터베이스 구조 : StudentInfo 테이블에는 student 데이터가 들어 있으며 Student 이름, Student 클래스, Student 섹션 열이 있습니다. ClassnSec은 클래스와 섹션 간의 관계를 유지 관리하는 테이블입니다.

저는 "학생 수업"을 "수업"을 가리키는 F.K로, "학생 수업"은 "수업"을 가리 킵니다. '2'& '을위한 행/항목이 없기 때문에

이제
------------------------------------- 
Name | ClassID | Section ID 
Mark  1   A 
Joe   2   A 
Gaurav  1   B 
------------------------------------- 

아래에 삽입하려고 학생 정보의 ClassnSec

에서

예를 들어, 입력

------------------------------------- 
ClassID | SectionID 

    1    A 
    1    B 
    2    A 
------------------------------------- 

항목, 그것은 삽입해서는 안 B ', 즉 클래스 2에 대한 섹션 B가 존재하지 않습니다. 따라서 학생 데이터를 삽입하는 것은 불법이어야합니다.

CREATE TABLE ClassNSec (
    ClassID int not null, 
    SectionID int not null, 
    constraint PK_ClassNSec PRIMARY KEY (ClassID,SectionID) 
); 
CREATE TABLE StudentInfo (
    StudentData varchar(10) not null, 
    ClassID int not null, 
    SectionID int not null, 
    constraint FK_StudentInfo_ClassNSec FOREIGN KEY (ClassID,SectionID) 
    references ClassNSec (ClassID,SectionID) 
); 

클래스와 섹션의 불일치를 방지 :

------------------------------------- 
Jon  2   B 
------------------------------------- 

답변

0

지금까지 내가 알고 있어요로서, MySQL은 다중 열 제약을 지원합니다. 개별 클래스 및 섹션 외래 키 제약 조건을 원하거나 필요로하는지 여부를 고려하고 싶을 수도 있습니다.

+0

나는 이와 비슷한 말을했다. 이제, ClassIDec에 ClassIDec = 2, SectionID = 'A'및 ClassID = 1, SectionID = 'B' "에 대한 항목이 있고 StudentInfo에 항목을 입력하려고하면 ClassNSec이 고장 났을 것이라고 생각합니다. "Class = 2"및 Section = 'B'인 학생 세부 정보, sql은 StudentInfo.ClassID가 기존 ClassNSec.ClassID를 참조하고 SectionID 대/소문자가 같으므로이를 받아 들여야합니다. –

+0

@guptakvgaurav - 이전 의견에서 제시 한 예와 이해가 안되며, 내 대답에 의해 허용되지 않는 무언가의 예가 될 수도 있고 내 대답이 허용해야하는 무언가의 예가 될 수도 있습니다. 예방. –

+0

당신의 대답은 제가 질문에 언급 한 제 경우에 대한 해결책이 아니라고 생각합니다. 귀하의 답변에 StudentInfo.ClassID는 ClassNSec.ClassId를 참조하고 StudentInfo.SectionID는 ClassNSec.SectionID를 참조하기 때문에 ClassNSec.ClassID = StudentInfo.StudentID에 ClassIDec에 SectionID 값이 있어야 함을 확인해야합니다. 내 게시물을 업데이트하고 더 나은 방법으로 설명하려고 시도합니다. –