도서 관리 APP [1]

jiyoon·2023년 5월 6일
2
post-thumbnail

1. member : book = n : m

여러 회원이 여러 권의 책을 대여할 수 있도록 n : m 관계를 설정해 주었다. n : m 관계를 설정해주므로 중복되는 책도 대여가 가능하다. (여러 회원이 동시에 같은 책을 대여할 수 있다).

반대로 1 : n 관계일 경우 한 명의 회원이 여러 권의 책을 대여할 수는 있지만, 한 권의 책은 오직 한 명의 회원에게만 대여 가능하다.

다시 말해 n: m 관계와 1 : n 관계의 차이는,

n: m 관계에서는 여러 회원이 동시에 같은 책을 대여할 수 있고, 1 : n 관계에서는 한 번에 한 명의 회원에게만 책이 대여 될 수 있다.

n : m 관계에서는 연결 테이블이 필요하고 이 테이블은 User와 Book 사이의 관계를 나타낸다. 1 : n 관계에서는 연결 테이블이 필요하지 않다.

추가로 1 : n 관계로 설정 시 대출 기록을 Book 테이블에 추가해 주어야 하므로, 여러 회원이 같은 책을 대여할 수 없다는 단점이 존재하였다. 따라서 n : m 관계와 중간 테이블인 Loan 테이블을 사용해 좀 더 유연하고 확장 가능한 구조로 설정해 주었다.


2. member : library = n : m

회원은 여러 도서관에 가입할 수 있다.
제약 조건 : 동일한 회원이 동일한 도서관에 중복 가입 X


3. book : library = n : 1

여러 도서는 하나의 도서관에만 속한다.


1. BookStatus

Book 테이블에 책 상태와 위치 칼럼을 추가해도 되지만, 데이터베이스 관리 면에서 BookStatus 테이블을 따로 생성하는 게 좋을 것 같았다. Book 테이블에는 책엔 대한 공통 정보만 저장하고 BookStatus 테이블에는 대출 가능, 대출 중, 책 위치와 같은 상태 정보를 만들어 중복 데이터를 최소화하기로 했다.

2. Membership

Member와 Library의 중간 테이블인데, 두 테이블의 관계에 대한 세부 정보나 추가 정보를 저장하기로 했다.

3. Loan

Member와 Book의 중간 테이블이고, 책 대출 기록을 관리하고 조회하는데 필요한 정보를 저장하기로 했다.


n : m , n : 1 관계가 생각을 조금만 바꾸면 둘 다 맞는 것 같아서 자주 헷갈린다 😵

profile
한걸음 나아가는 개발자

0개의 댓글