수강 신청 & 성적 처리 시스템 (Oracle)

Oracle Semi Project

기간 : 3월 16일 ~ 3월 20일



💡 주제 : 『 프로젝트 요구분석서 』 내용대로 성적 처리 시스템을 구현해보기
+ 선생님이 요구분석서 관련 내용은 공유하지 말라고해서 꼼꼼히는 못올릴 것같다. 😭

 

 


💡 과정 (대략)
1) 요구분석서를 보면서 파악하기
2) ERD 그려보기
3) 테이블 구성
4) SQL 작성 (프로시저, 트리거, 뷰 등등 구현)
5) 데이터 넣어보고 테스트

 

 

 

✔ 과정 1 - 요구분석서 파악하기

 

 


✔ 과정 2 - ERD(Entity Relationship Diagram)
ERD는 데이터베이스 구조를 한 눈에 알아보기 위해 그려놓는 다이어그램이라고 한다.
FLOW CHART랑 비슷한거라 생각했는데 완전히 다른 거였다!

플로우차트가 흐름을 그린 거라면 ERD는 구조를 그린 것 (내 생각)

 

 

🔗 ERD는 여기서 그렸다!

https://www.erdcloud.com/

 

ERDCloud

Draw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool.

www.erdcloud.com


정말 너무 편리한 사이트다 ...
그것도 모르고 난 그림판 킬 생각함^^;ㅋㅋ

이런거 만든 사람은 천사...인가? 🧚‍♂️

이렇게 바로 SQL로 보낼 수도 있다.

아 물론 이번 프로젝트는 이 기능은 전혀 사용하지 않았다.
직접 다 만든거라구! ✌

ERD는 정말 많은 과정을 거쳤다 ㅋㅋㅋ
과정을 거칠 수록 점점 깔끔해졌고

최종적으론 이런 모습!

깔~~끔!

 


✔ 과정 3 - 테이블 생성

테이블 만드는 건 쉬웠다 😆
나도 쉽다는 표현을 한다는게 정말 놀랍지만
진짜로 쉬웠다...

예전에 팀끼리 테이블 복사하던 때에 나 혼자만 외래키 이해가 안가서
한동안 외래키 공포증이 있었는데
잘 극복한 것 같다ㅋㅋㅋ

 

 

✔ 과정 4 - SQL 작성
프로시저도 커서도 뷰도 이제는 다 만들 수 있다!!!
(보면서ㅎ;)


💡 프로젝트 진행 방식

 

ZOOM, 구글 MEET, 구글 프레젠테이션을 활용하였다!

 



💡 프로젝트 전에는 완전 몰랐던 것

1. JOIN과 UNION이 비슷하다고 생각했다.
JOIN은 두 릴레이션의 속성을 결합하여 결과 튜플을 형성하고,
UNION 절은 두 쿼리의 결과를 결합

그러니까 .. JOIN은 수평(병렬)으로 결합, UNION은 수직(직렬)으로 결합

2. 식별관계의 개념을 잘 몰랐다...
그냥 다 비식별로 하면 안되나요? ㅇㅈㄹ할뻔 휴
이렇게 중요한걸 왜 몰랐던거지;

⭐ 식별 관계 → 부모 테이블의 기본키 또는 유니크 키를 자식의 기본키로 사용하는 관계
부모 테이블의 키가 자신의 기본키에 포함되기 때문에
반드시 부모 테이블에 데이터가 존재해야 자식 테이블에 데이터를 입력할 수 있습니다.
즉, 부모 데이터가 없다면 자식 데이터는 생길 수 없습니다.

 비 식별 관계 → 부모 테이블의 기본키 또는 유니크 키를 자식의 외래 키로 사용하는 관계
자식 데이터는 부모 데이터가 없어도 독립적으로 생성될 수 있습니다.
부모와의 의존성을 줄일 수 있기 때문에 조금 더 자유로운 데이터 생성과 수정이 가능합니다.



💡 프로젝트를 통해 알게된 꿀팁

1. 날짜(DATE) 컬럼을 통해 데이터 컨트롤 쉽게하자
예를 들면 학생회원테이블에 등록날짜 컬럼을 추가하기 그리고 사용자별로 기능이 완전히 다른데
회원을 한 테이블에 합치면
뭐 이것저것 오류가 발생할 수 있음
예를 들면 .. 학생만 수강신청이 가능해야하는데 교수도 가능하다던가 등등

2. 반복될 수 있는 탈락사유, 과정명 등등 이런건 1정규화 혹은 코드화하기

3. ORA-01427 : single-row subquery returns more than one row
단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다 ㅇㅈㄹ

완전 간단한 삭제 프로시저여서 개무시했는데
값이 여러 개가 나오면 이 에러가 뜸
그러니까 하나로 나오게 하면 된다.

나같은 경우는 바로 SELECT 하는게 아니고
서브쿼리로 COUNT() 활용했다



소감
오라클 프로젝트를 앞두고 걱정이 많았다...
자바에 비해 조심해야 할 것도 많았고 오라클 속 구조에 대한 이해가 부족한 탓이었다.
하지만 성적 처리 시스템을 ERD 설계부터 구현을 하면서
어렵고 이해가 안 갔던 것들에 대한 의문들이 풀렸다.
예를 들면 식별 관계의 중요성을 느꼈고, 프로시저나 커서, 트리거에 대해
구조적으로 이해가 갔다.

그리고 가장 중요한 건 자바 프로젝트 때처럼 오라클에 대해 점점 재미를 느끼게 되었다는 점!
또 부족했던 코딩 실력이 팀원들 덕분에 여러모로 많은 발전을 할 수 있던 프로젝트였다.