2010-12-15 4 views
1

목록의 단일 정수 요소에 응답하는 정수 목록에 대해 외래 키를 만드는 방법이 있는지 궁금합니다.MYSQL : 각 정수 요소에 대해 외래 키 제약 조건을 사용할 수있는 정수 (ID) 목록 만들기?

예를 들어, "연습 문제"표가 있습니다. 그 테이블에, 나는 두 개의 관련된 열을 유지하기 위해 싶습니다 "exercisesID" "relatedExerciseIDs"

그러나 "relatedExerciseIDs는"쉼표로 구분 된 "exerciseID"의를 포함하는 VARCHAR입니다. 테이블에서 운동을 삭제할 때 "relatedExerciseIDs"목록에서 삭제 된 "exerciseID"가있는 운동은 제거해야합니다.

이것이 가능합니까? 어떻게해야합니까?

의견을 보내 주셔서 감사합니다. 가능한 경우 VARCHAR 이외의 열 유형을 사용하는 데 관심이 있습니다. =)

답변

1

모든 열 값은 원자이어야합니다.

단일 값 내에서 조회 할 항목의 목록이 없어야합니다.

연습 문제를 다른 연습 문제와 관련시키는 방법은 두 번째 테이블을 사용하는 것입니다. 두 개의 열이 있으며 각 열에 운동 ID가 있으며 두 열 모두 연습 테이블 외래 참조입니다.

+0

= S 밤하늘은 밤하늘이 될 것입니다 ... 감사합니다! 나는 그런 칼럼을 가지고있다. 그래서 나는 각각을 위해 테이블을 만들어야 할 것 같다. 나는 쉬운 방법이 있기를 바랬다. 진실은 삼키는 것이 어렵습니다. – Garrett

0

유일한 방법은 저장 프로 시저를 사용하거나 선택한 언어로 사용하는 것입니다. 레코드를 삭제하면 LIKE 쿼리를 수행하여 구분 된 필드의 값으로 레코드를 찾습니다. 실제로는 일을하는 가장 좋은 방법은 아니며 필요할 때 해당 필드를 인덱싱 할 수 없으므로 지옥처럼 느려질 수 있습니다.

가장 좋은 방법은 두 개의 운동 ID 필드 (exercise_id, related_exercise_id) 만 사용하여 운동 간의 관계를 정의하는 또 다른 테이블을 만드는 것입니다.

Database Normalization에서 읽어야합니다.

+0

나는 매우 바보 같다고 느낍니다. 저는 데이터베이스에 대한 과정을 배우고 있습니다. 정상적인 형태와 무손실 데이터베이스를 구성하는 최적의 방법에 대해 모두 배웠습니다 ... 나는 학교를 실습에 적용하는 데 약간 새로운 것으로 생각합니다. 그게, 아니면 다음주에 시험에 나올거야! 하하 – Garrett

+0

@ 개렛 : 기분 나빠하지 마라. 우리 모두는 어딘가에서 시작합니다. 당신은 항상 향상시킬 필요가 있습니다. 그렇게 생각하면 멀리 갈 수 있습니다. 시험에 좋은 행운을 빕니다. – AgentConundrum

관련 문제