행과 열로 이루어진 각각의 테이블에서 고유값(Primary Key)을 참조하여 서로 종속되는 관계(=연결)로 표현하는 데이터 베이스 구조를 관계형 데이터베이스라고 한다.
coodd의 12규칙을 따르고자 하는 데이터베이스를 뜻하기도 한다. but.. 전부 다 따를 수는 없다.
● 관계형 데이터베이스의 특징
Primary Key : 관계형 데이터베이스에서 조의 식별자로 이용하기에 가장 적합한 것을 관계 마다 단 한 설계자에 의해 선택, 정의된 후보 키를 말한다.
●ERD
현실세계의 요구사항(Requirements)들로 부터 Database를 설계과정에서 활용된다. 즉, 개념을 모델링하는 것으로 개체(entity)와 속성(attribute), 관계성(relationship) 을 표현한다.
- Entity(개체) : 표현할 정보를 가지고 있는 독립적인 객체 또는 실체
- Attribute(속성) : Entity가 지니고 있는 특성, 성질
ex. 학생(개체)의 학번, 학과- Relationship(관계) : ERD의 가장 큰 목적 중의 하나로 Entity들 간의 관계를 표현
간단하게 데이터베이스를 설치해보고 실습을 해보자.
먼저 docker를 이용해서 쉽게 설치를 할 수 있다.
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 3306:3306 mysql:8
** 도커없이 설치를 하고 싶다면 여기에서 참고하여 설치를 진행하면 된다.
다음 단계로 서버에 접속하기 위한 클라이언트를 다운받는다. (자세한 설명은 밑에 추가)
여기로 들어간 후에 본인의 운영체제에 맞게 선택해서 설치한다.
그리고 설치를 다 한 후 실행하면 아래와 같은 화면이 나온다.
첫번째로 설치한 것은 관계형 데이터베이스 서버이다. 그리고 서버에 접근을 해서 사용자가 원하는 것을 요청하고 응답받는 클라이언트가 필요한데 이 클라이언트 프로그램이 두번째로 설치한 mysql workbench이다.
다른 mysql 관계형 데이터베이스 서버도 mysql workbench를 통해서 접근할 수 있다. (단 다른 회사 데이터베이스 서버는 제외!)
위 실행된 화면에서 MySQL Connections 옆에 있는 +버튼을 누르고 아래와 같이 새로운 커넥션을 입력한다. 비밀번호는 위에서 도커서버에 입력했던 비밀번호인 my-secret-pw 이다. (Store in Vault.. 를 클릭해서 아예 비밀번호를 저장시켜도 된다.)
** 참고! 커넥션을 만들기 전에 꼭 도커에서 sql을 실행시켜야한다!
아래 우측버튼에서 스키마로 전환한 뒤 전환된 창 위에 오른쪽 마우스를 클릭해 Create Schma..를 클릭한다.
그리고 스키마 이름을 입력한 뒤에 apply를 클릭하면 아래와 같은 화면이 나온다. 다시 apply를 클릭한다.
여기서 말하는 스키마라는 단위는 데이터베이스라고도 불리는데 스키마 안에 사용한 테이블을 격리시켜 놓는다. 하나의 스키마에서 하나의 서비스에 대한 테이블을 모아놓을 수 있도록 스키마를 만든다.
스키마를 다 만들고 난 후 Users and Priviliges -> Add Account 를 눌러서 유저를 만든다.
비밀번호를 설정하고 난 후 아래 화면과 같이 모든 권한을 부여하고 Apply 버튼을 누른다.
그리고 다시 홈 화면으로 나와서 아래와 같이 새로운 커넥션을 만든다.
그러면 아래 왼쪽과 같이 demo_schema가 보이고 간단한 명령어를 통해 정상적으로 접근이 되었는지 확인할 수 있다.
select * from dual : dual은 테이블에 위치에 들어가야하는데 넣을 테이블이 없을 때 사용하면 되고 db에 1을 돌려달라고 요청을 하는 것이다. -> 테스트용 sql문구이다.
테이블을 하나 만들어고 난 후 (Tables에서 오른쪽 마우스 클릭 후 Create Tables 클릭)아래와 같이 이름을 입력하고 컬럼들을 만들어보자.
AI (AutoIncreament) : 자동으로 하나 씩 증가된다. 위에서는 데이터가 추가될 때마다 id가 1씩 올라간다.
컬럼들을 다 작성하고 Apply를 누르면 아래와 같이 화면이 뜬다.
그리고 드디어 쿼리에 명령문을 작성해보자...!!
간단한 CRUD만 작성할 것이다.
아래와 같이 입력을 하고 실행시키면 행이 추가된 것을 볼 수 있다.
insert into post (title, content, writer)
values ("Hello MySQL", "This is my first post", "khs");
insert into post (title, content, writer)
values ("Hello RDB", "using SQL!", "khs");
select * from post;
아래와 같이 작성하면 id가 2에 해당하는 데이터의 제목을 수정할 수 있다.
update post set title = "Hello Update!" where id = 2;
select * from post;
그리고 아래와 같이 명령문을 입력하면 id가 2인 데이터가 지워진 것을 확인할 수 있다.
delete from post where id = 2;
select * from post;
다른 테이블끼리의 연결도 실습을 진행해보자.
id 와 name을 컬럼으로 갖는 board 테이블을 하나 만든다.
그리고 왼쪽에서 post테이블에 오른쪽 클릭을 한 후 alter table항목을 누르고 아래와 같이 board 컬럼을 추가한 후 apply를 누른다.
그리고 아래와 같이 쿼리문을 작성하면 값이 추가된 것을 확인할 수 있다.
그리고 10번째 줄처럼 작성을 하면 inner join도 실행할 수 있다. (outer join도 가능하다!)
이상으로 sql을 설치하고 간단한 CRUD명령어를 입력해보았다. 다음에는 스프링부트에 데이터베이스를 적용해보겠다.