mongodb - mogodb如何进行设计
淡淡烟草味
淡淡烟草味 2017-04-28 09:04:48
0
1
756

想知道大家在做非关系型数据库的项目时是如何进行设计的,以学生选课为例,每个学生可以选择多个课程,每个课程可以让多个学生选择,这种多对多关系要如何设计,如果我要删除一个课程,如何保证数据库的一致性?

淡淡烟草味
淡淡烟草味

모든 응답(1)
仅有的幸福

MongoDB는 문서와 테이블이라는 두 가지 기본 모드를 고려합니다.

문서 모드는 학생 과목 선택을 예로 들어 학생이 선택한 모든 과목을 문서에 기록합니다. 분할 테이블 모드는 학생과 과목이 별도로 분리되는 관계형 데이터베이스와 같습니다. 테이블을 선택한 다음 학생과 강좌 간의 대응 테이블을 만듭니다(강좌 선택).

문서의 가장 큰 장점은 읽기 효율성이 높다는 것입니다. MongoDB에는 joint이 없습니다. 테이블로 나누면 여러 테이블이 포함된 쿼리마다 여러 쿼리가 수행됩니다. 문서의 가장 큰 단점은 유지관리가 불편하다는 점이다. 예를 들어, 강좌의 정보를 수정하는 경우 해당 강좌가 포함된 학생 문서를 모두 찾아 하나씩 수정해야 한다. 또한 문서의 크기가 제한되어 있으며 데이터를 무한정 추가할 수 없습니다.

하위 테이블의 장점과 단점은 문서 유형과 반대입니다.

실제로는 신중하게 선택해야 합니다. 주로 읽는 데이터는 문서 모드를 선택하는 경향이 있으며, 쓰기/수정 빈도가 높은 데이터는 테이블 분할을 고려할 수 있습니다. 또한, 데이터가 무한정 증가할 수 있는 필드의 경우 일반적으로 별도의 테이블 스토리지를 고려해야 합니다.

보통 두 가지를 조합하여 사용하며, 읽는 빈도가 높은 정보를 문서에 기록하고 그 외의 세부 정보는 별도로 생성합니다. 귀하의 예에서는 학생과 과목에 대해 두 개의 테이블이 생성됩니다. 과목 선택의 기본 정보(예: 과목 코드 및 이름)가 각 학생 문서 아래에 기록된 다음 각 과목의 특정 정보가 과목 테이블에 저장됩니다.

학생의 과목 선택 정보를 나열할 때마다 하나의 쿼리로 모든 선택 과목의 코드와 이름을 나열할 수 있습니다. 특정 과목의 세부 정보를 보려면 과목 일정에 대해 다른 쿼리를 수행하세요. 이를 통해 전체 테이블 파티셔닝에 비해 하나의 쿼리를 줄일 수 있으며, 전체 문서 기록에 비해 강좌 정보 수정 시 문서 크기와 수정 범위가 줄어듭니다.

강좌를 삭제하려면 먼저 강의일정에서 해당 강의의 문서를 삭제한 후 학생 테이블에서 해당 강의가 포함된 모든 기록을 찾아서 수정하세요. 인덱스와 연산자를 유연하게 사용하는 것은 문제가 되지 않습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿