SQL

[스키마 구성]SQL로 테이블 변경 및 외래키

Bordercolli 2023. 8. 24. 10:12
728x90

🌭 테이블 구조수정

→ 케이스가 많아서 테이블 구조 수정이 다소 복잡하다.

1. 새로운 컬럼 추가

ALTER NAME 테이블명 ADD COLUMN 컬럼명 데이터값 [옵션];

DESC 테이블;

 

2. 컬럼 타입 변경

name 컬럼의 데이터 공간을 가변적으로 만들어보자.

ALTER TABLE 테이블명 MODIFY COLUMN 기존컬럼명 변경하고자하는 데이터 값;

DESC 테이블명;

 

3. 컬럼 이름 변경

name컬럼명을 modelname으로 바꾸고자 한다.

CHANGE COLUMN 은 이름, 데이터값도 바꿀 수 있음.

ALTER TABLE 테이블명 CHANGE COLUMN 기존컬럼 새로운컬럼 새로운데이터값;

DESC 테이블명;

 

4. 컬럼 삭제

age컬럼을 삭제해보자.

🌭 연습문제(생성, 조회, 변경)

문제1. 이런 데이터베이스와 테이블을 생성하고 조회하라.

INT() 일정 주소공간을 넣는 부분은 더이상 지원하지 않는다.

 

문제2. 아래 그림과 같이 테이블을 수정하라.

 

문제3. 위 테이블을 삭제한 후 문제1. 과 같은 컬럼을 가진 테이블을 생성하라.

🌭 외래키(Foreign Key)

스키마를 sql구문으로 만들때, 앞에는 테이블간의 관계를 맺어주지는 않았다. 이런 테이블 간의 관계를 맺어주는 것이 외래키이다. 외래키는 A테이블과 B테이블의 어떤 필드가 관계가 있다 라고 선언해주는 명령어이다.

하지만 이런 관계를 SQL구문으로 명시적으로 연결시켜주는 것만이 스키마에서 얘기하는 테이블과 테이블 간의 관계를 맺어준다는 얘기는 아님!!! 그러면 그 부분을 어떻게 관계형 데이터 베이스를 이해해야 할까???

 

EX) (관계형 DB구현 X)네이버 쇼핑에 상품이 카테고리별로 있고, 각 상품들을 파는 쇼핑몰들이 또 연결되어 있다. 우리들이 로그인을 하면 내가 구매한 상품들도 있을 것이다. 이런 정보들을 다 DB에 넣는다고 가정한다면  

1. 네이버 쇼핑이라는 데이터 베이스를 만든다.

2. product라는 테이블을 만든다. 

3. 이 테이블에 대한 정보에 키로서 id를 넣고, title, 카테고리, 등록날짜, 가격, 쇼핑몰1,쇼핑몰2, 쇼핑몰3, 쇼핑몰4, 몰네임1, 몰네임2, 몰네임3, 몰네임4, 몰1가격, 몰2가격, 몰3가격, 몰4가격

product 테이블안에 모든 정보를 넣음

EX) (관계형 DB구현 O)

1. PRODUCT 테이블에는 쇼핑몰 정보 없이 오로지 상품 정보만을 입력한다.

product

2. MALL테이블에는 MALL_ID, MALL_NAME, PRODUCT_ID 이 세 가지만을 입력한다.

fun_coding몰에는 사과, 배, 레몬을 판매한다. 그래서 product_id에는 1,2,3을 삽입한다.

fun2몰에는 옷, 바지를 판매한다.

이처럼 각 쇼핑몰에 이름을 넣고, 그 각 쇼핑몰마다 판매하는 상품을 각각의 레코드로 기록할 수 있다.

mall

3. user테이블에는 id, name, pw, phone, address, 구매id를 입력한다.

이런 식으로 외래키를 적용하면 각 테이블에 들어갈 데이터도 줄고, 필요로 하는 정보만 들어가서 가시성이 좋아진다.

 

테이블 간의 연결점을 만들어 놓으면 테이블을 관리하기가 편하다. 이처럼 복잡하게 한 테이블에 컬럼이 많을 때 적합하게 컬럼도 줄이면서, 필요한 정보를 빠르게 가져오게끔 데이터 구조를 만들면 좋을까? 라고 했을때, 관계형 데이터베이스라고 해서 테이블을 만들고 각 테이블 간의 연결점을 찾을 수 있게 구조를 만들어 놓으면 데이터 관리가 굉장히 편리할 것 같다.

라고 해서 나온 것이 RDB이다. 

그래서 이 관계형 데이터베이스와 관련해서 여러가지 프로그램들이 나왔고, 그것들을 너무 많은 프로그램이 나오다보니 각 명령어를 배우기 어려워졌고, SQL을 가지고 통일해보자 해서 SQL이 등장하게 되었다.