안녕하세요, SSAFYcial 신산하입니다 : )
3월 기획기사의 주제는 데이터베이스편으로 가져왔습니다!
비전공 자바반의 경우 바로 다음주(13~17일)에 데이터베이스를 배우는 시간이 있는데요.
그 전에 데이터베이스의 기초를 알아가면 좋을 것 같아서 준비했습니다 ㅎㅎ
제가 학부시절 했었던 '수강신청 웹 개선 프로젝트'를 중 일부를 통해
데이터베이스 기초를 알아가는 시간을 가졌으면 좋겠습니다!
* 프로젝트 데이터베이스 연결은 100% 정확하지 않으니(오류 o) 참고용으로만 봐주셨으면 좋겠습니다 ❤️ *
* 해당 글은 Mysql 기준으로 작성되었습니다! *
1. DATABASE 넌 대체 누구냐...?
프로젝트 배경 설명
"응...? 이게 뭐지?..."
데이터베이스를 처음 접하시는 분들은 이 무슨 도형들의 나열인가 심란하실 것입니다...
저도 처음 데이터베이스를 배울 때 그랬습니다 ㅎㅎ...
데이터베이스 내용을 본격적으로 들어가기에 앞서
먼저 해당 데이터베이스의 배경을 설명드리겠습니다!
저희 학교 수강신청 웹에서는
정확히 학수번호나 강의명을 토시하나 틀리지 않고,
똑같이 쳐야만 원하는 강의를 볼 수 있었습니다.
저는 이러한 점을 auto comletion, 즉 자동완성 기능을 넣어
학생들에게 편리한 수강신청 환경을 제공하고자 했습니다!
위 이미지는 자동 완성 기능을 재현하기 위해
필요한 데이터베이스 요소들을 담은 모습이라고 봐주시면 될 것 같습니다 : )
자! 이제 위 이미지를 이해하실 수 있도록
데이터베이스 기초에 대해 설명드리겠습니다!
1. 데이터베이스란?
데이터 모음집
오라클 공식 문서에 따르면 데이터베이스란 구조화된 정보 또는 데이터의 조직화된 모음으로서 일반적으로 데이터베이스 관리 시스템(DBMS)에 의해 제어된다고 나와있습니다.
한마디로 축약하자면 데이터베이스는 어떤 특정한 규칙을 통해 저장되어있는 데이터들의 모음이고, DBMS라고 하는 데이터베이스 관리 시스템으로 데이터를 삽입, 삭제, 수정, 조회 등의 명령을 입력/제어할 수 있다고 보시면 됩니다.
위 그림으로 따지면 저는 수강신청 기능을 개선하기 위해 필요한 학생, 강의 데이터 정보를 모아둔 데이터베이스를 가져온 것입니다.
2. Entity (엔티티 / 객체)와 Attribute(어트리뷰트 / 속성)
1. 형태 이해
entity와 attribute는 긴밀한 관계를 가지고 있습니다. entity는 사람이나 물건 혹은 눈에 보이지 않는 것까지 엔티티가 될 수 있습니다. 위 프로젝트로 예를들면 눈에 보이는 엔티티는 학생, 교수가 있을 수 있고, 눈에 보이지 않는 엔티티로는 강의, 장바구니가 있을 수 있죠.
attribute는 이런 엔티티들의 속성들을 가리킵니다. 서비스 요구사항을 기반으로 관리해야할 필요가 있는 속성들만 엔티티의 속성이 될 수 있습니다. 예를 들어 학생 entity의 속성을 뽑아볼까요? 수강신청 웹을 사용하기 위해 학생의 어떤 정보가 필요할까요?
학생 entity에 필요한 attribute |
ID (아이디) |
Password (비밀번호) |
이름 |
주 전공 학과 |
부/복수 전공 학과 |
신청 가능한 학점 |
학번 |
학년 |
수강하는 강의의 학수번호 (과거 들었던 강의까지) |
이런 학생의 정보를 가지고 웹 수강신청 사이트의 기능을 구성하게 됩니다.
Entity와 Attribute 확실하게 이해하셨죠?!
2. Mysql 명령어 이해
이러한 Entity와 Attribute는 관계형 데이터베이스에서는 '테이블'이라고 불리게 될 겁니다. 만들어진 모양이 테이블 같지 않나요?! ㅎㅎ
해당 테이블을 만들기 위해선 Mysql에선 CREATE TABLE 명령어를 사용해야합니다.
CREATE TABLE student(
id VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
name VARCHAR(20) NOT NULL,
major VARCHAR(50) NOT NULL,
major2 VARCHAR(50),
count INT,
student_num INT NOT NULL,
grade INT NOT NULL,
lecture_num INT,
PRIMARY KEY (id)
FOREIGN KEY(lecture_num) references lecture(lecture_num)
);
잠시 명령어 설명 들어가겠습니다!
1) id(아이디) 등 만들고 싶은 속성명을 입력합니다.
2) 다음 VARCHAR(50)의 경우 이 속성으로 들어오는 데이터 값이 어떤 타입인지를 나타냅니다. VARCHAR(50)은 문자타입으로 최대 50글자까지 입력할 수 있다는 의미입니다. 그외 INT의 경우에는 숫자 타입이 들어올 수 있다는 의미입니다.
3) 또한 NOT NULL이라는 명령어는 NULL 값이 입력될 수 없다는 의미로 쓰입니다.
4) PRIMARY KEY(id)의 경우 해당 student 테이블의 유일성과 최소성을 만족하는 키입니다. 현재에서 간단하게 말씀드리면 전체 속성 중 절대 중복될 수 없는 속성을 말합니다. 예시를 들자면 사람들의 고유키, 기본키는 주민번호가 될 수 있겠죠! 예리하신 분들은 알아차리셨겠지만, 물론 현재 student 테이블에서는 학생번호도 기본키가 될 수 있습니다.
5) FOREIGN KEY(lecture_num) references lecture(lecture_num)의 경우 현재 속성 lecture_num은 강의(lecture) 테이블의 기본키 속성 lecture_num을 그대로 참조한다는 의미입니다. 즉, 다른 테이블에 쓰인 속성을 중복해서 또 쓰지 않아도 된다는 의미라고 봐주세요 : )
3. 필드와 레코드
엔티티 속성과 데이터
1. 형태 이해
위에서 만든 student 테이블에 데이터를 삽입할 수 있을 겁니다. 이 때 생성되는 데이터의 행 단위의 데이터를 레코드라고 합니다. 그리고 이 레코드를 튜플이라고도 부릅니다. 각 속성은 필드라고도 불리는데, 이 필드에는 아까 테이블을 만들 때 NOT NULL을 설정해준 속성의 경우 꼭 값이 들어가 있는 것을 볼 수 있습니다.
2. Mysql 명령어 이해
INSERT INTO student(ID, Password, name, major, major2, count, student_num, grade, lecture_num)
value(tksgk2598,1234,신산하,산업공학,소프트웨어,20,201734923,4,11111);
1번 줄 튜플은 INSERT INTO 명령어를 통해 삽입할 수 있습니다. 명령어 설명을 잠깐 해드리겠습니다!
1) 튜플을 넣고 싶은(student) 테이블 명을 바로 써줍니다.
2) 어떤 필드에 해당하는 데이터를 넣을 것인지 테이블 명 뒤 괄호를 이용해 표현해줍니다. 만약 전체 필드에 순차적으로 빠짐없이 데이터를 넣는다면 괄호 부분을 생략해도 됩니다.
3) value 명령어를 통해 넣고 싶은 데이터를 순차적으로 써줍니다.
4. 관계
관계형 데이터베이스
Entity와 Attribute는 관계형 데이터베이스에선 하나의 테이블이 된다고 했습니다. 그리고 이 테이블이 데이터베이스 안에선 다양하죠! 학생 엔티티 테이블의 튜플들도 있을 수 있고, 교수 엔티티의 테이블의 튜플들도 있을 수 있으니까요! 이러한 테이블끼리는 서로의 관계가 형성되어 있습니다. 관계 표현은 앞서 말씀드렸던 FK(FOREIGN KEY) == 외래키와도 많은 연관이 있습니다.
간단히 학생 테이블과 강의 테이블을 보면 "수강 신청을 하다"라는 관계로 묶여있는 것을 보실 수 있습니다. 좀 풀어서 설명드리자면, "학생은 강의를 수강신청 한다.", "강의는 학생에게 수강신청 되어진다."의 관계로 묶여져 있습니다.
그리고 강의 기본키인 학수번호는 학생의 FK(외래키)로 들어가 있는 것을 확인하실 수 있으실 겁니다. 학생이 듣는 강의를 강의 테이블을 통해 확인할 수 있다는 뜻이죠!
또한 학생과 강의는 이런 이상한 다리와 동그라미가 붙어있는 것을 확인하실 수 있으실 겁니다. 다리는 테이블의 튜플이 몇개가 들어올 수 있는지를 나타냅니다. 풀어서 설명드리면, 학생은 여러 개의 강의를 수강할 수 있습니다. 그리고 강의는 여러 명의 학생이 수강신청할 수 있습니다. 이를 다리 3개를 풀어 나타내는 것입니다. 바로 다대다 관계입니다.
동그라미의 경우 0개를 의미합니다. 즉, 학생은 0개 또는 하나 이상의 강의를 수강할 수 있고, 강의는 0개 또는 한 명 이상의 학생이 수강할 수 있다는 의미로 보시면 되겠습니다.
교수와 강의 테이블의 관계도 보실까요?! 새로운 관계가 보이시죠? 다리가 3개가 아닌 1개이고, 동그라미가 아닌 일자모양의 관계가 보이실 겁니다. 관계를 풀어서 설명부터 해보자면 교수는 0개 또는 1개 이상의 강의를 담당할 수 있습니다. 강의는 반드시 1명의 교수가 맡아야합니다. 이는 다대일의 관계입니다. 즉 1개의 다리는 1의 관계입니다. 또한 동그라미가 아닌 일자모양은 "반드시"를 의미합니다. 0개가 올 수 없다는 의미죠!
이런식으로 테이블 간의 관계를 다대다 다대일 일대일로 표현할 수 있는 것 입니다.
5. 테이블&튜플 삭제와 수정
삽입을 알면 삭제 수정도 알아야죠!
테이블 및 튜플 생성만 알면 아쉬우니 테이블 및 튜플 삭제 및 수정도 알아볼까요?!
1. 수정
1) student 테이블의 id 필드이름을 student_id로 바꿔라
ALTER TABLE student id student_id;
2) student 테이블의 mileage 필드를 추가해라
ALTER TABLE student add mileage int;
3) id가 tksgk2598인 튜플의 grade를 1로 바꿔라
UPDATE student SET grade=1 WHERE id='tksgk2598';
2. 삭제
1) id가 tntks2598인 튜플을 삭제해라
DELETE FROM student WHERE id='tntks2598';
2) student 테이블 자체를 삭제해라
DROP TABLE student;
6. 데이터베이스 제어
드디어 제 프로젝트를 이해할 수 있으실까요?!
앞서 말씀드린대로 제 프로젝트의 목적을 이룰 차례입니다.
저희 학교 수강신청 웹에서는 정확히 학수번호나 강의명을 토시하나 틀리지 않고, 똑같이 쳐야만원하는 강의를 볼 수 있었습니다. 하지만 저는 이러한 점을 auto comletion, 즉 자동완성 기능을 넣어 학생들에게 편리한 수강신청 환경을 제공하고자 했습니다!
이 기능을 위해 여러분들은 데이베이스 제어법을 알아야 할 필요가 있습니다! 바로 select from where의 3박자를 기억하시면 됩니다!
1) from
먼저 from에는 테이블 명이 쓰입니다. 내가 사용하고 싶은 필드가 있는 테이블을 넣어주시면 됩니다.
위 이미지를 예시로 들자면 강의 테이블의 강의명 필드와 교수 테이블의 교수명을 보여주고 싶다면 from 절에 lecture와 processor 테이블을 넣어주면 됩니다.
2) select
필드 값이 들어갑니다.
위 이미지를 예시로 들자면 강의 테이블의 강의명 필드와 교수 테이블의 교수명을 보여주고 싶었기 때문에 select절에 lecture 테이블의 lecture_name과 교수테이블의 name을 넣어줬습니다.
3) where
where 절에는 어떤 데이터가 들어가면 좋을지를 제어합니다.
위의 이미지를 예시로 들자면 [lecture_name like "산업%"]의 경우 산업이라는 글씨가 들어간 모든 과목명을 띄우라는 의미입니다.
또한 a.professor_id=b.professor_id는 특정 과목을 담당하고 있는 교수의 아이디가 lecture 테이블에 들어가 있는데, 우리는 그 교수의 이름을 알고 싶으니 professor 테이블에 있는 교수와 같은 튜플을 확인 후 그 교수의 이름을 가져오라는 의미입니다.
여기까지! 데이터베이스의 기초 알아보았습니다.
오늘 저의 글이 앞으로의 수업에 도움이 되셨으면 좋겠습니다 : )
남은 3월 한달도 화이팅입니닷!!!
'대외활동 > SSAFYicial' 카테고리의 다른 글
[CS 정리는 내가 할게, 면접은 누가볼래? - 운영체제편] 쓰레드(Thread) 이름만 들어보신 분? (0) | 2023.05.13 |
---|---|
[CS 정리는 내가 할게, 면접은 누가볼래? - Github편] Github 어디까지 해봤니? 소스트리 설정부터 브랜치 관리까지 총정리! (5) | 2023.04.18 |
[TMI] 내가 퇴사하고, SSAFY한 이유, "난 아직 젊다!" (6) | 2023.03.11 |
[CS 정리는 내가 할게, 면접은 누가볼래? - 디자인 패턴편] 6가지 디자인 패턴 총정리! (0) | 2023.02.24 |
[스몰 인터뷰] SSAFY 첫 월급, "첫 월급 받으면 뭐할거야?" (0) | 2023.02.18 |