데이터베이스 정규화

데이터베이스 설계를 할 때, 빼놓을 수 없는 중요한 개념 중 하나가 바로 '정규화'다.

 짧게 말하자면 정규화는 데이터베이스의 데이터를 구성하는 프로세스다.

 이 과정에서는 데이터를 보호하고, 중복성과 일관성 없는 종속성을 제거하여 데이터베이스를 보다 유연하게 만들기 위해 설계된 규칙에 따라 테이블을 만들고, 해당 테이블 간에 관계를 설정한다.

 

즉, 정규화는 테이블을 어떻게 나누어야하는 것인가에 대해서 기준을 제시한다고 볼 수 있다.

정규화의 규칙: 1, 2, 3 정규화

데이터베이스 정규화에는 몇 가지 규칙이 적용됩니다. 각 규칙을 "일반 양식"이라고 합니다. 첫 번째 규칙이 관찰되면 데이터베이스는 "첫 번째 일반 형식"이라고 합니다. 처음 세 규칙을 관찰하는 경우 데이터베이스는 "세 번째 일반 형식"으로 간주됩니다.

1 정규화

첫 번째 정규 형식은 개별 테이블에서 반복되는 그룹을 제거하는 거다. 그래서 각 관련 데이터 집합에 대해 별도의 테이블을 만들고, 기본 키를 사용하여 각 관련 데이터 집합을 특정할 수 있다.

예를 들어, 아래와 같은 테이블이 있다고 가정해보자.

Student# Advisor Adv-Room Class1 Class2 Class3
1022 Jones 412 101-07 143-01 159-02
4123 Smith 216 101-07 143-01 179-04

이 테이블을 첫 번째 정규 형식에 맞게 변환하면 아래와 같이 된다.

Student# Advisor Adv-Room Class#
1022 Jones 412 101-07
1022 Jones 412 143-01
1022 Jones 412 159-02
4123 Smith 216 101-07
4123 Smith 216 143-01
4123 Smith 216 179-04

2 정규화

2 정규화는 여러 레코드에 적용되는 값 집합에 대해 별도의 테이블을 만드는 것이다. 이를 위해 외래 키를 사용해 이런 테이블 간의 관계를 설정해줘야만 한다.

위의 테이블을 두 번째 정규 형식에 맞게 변환하면 아래와 같이 된다.

Students:

Student# Advisor
1022 Jones
4123 Smith

Faculty:

Name Room Dept
Jones 412 42
Smith 216 42

Registration:

Student# Class#
1022 101-07
1022 143-01
1022 159-02
4123 101-07
4123 143-01
4123 179-04

3 정규화

3 정규화는 키에 의존하지 않는 필드를 제거하는 것입니다. 해당 레코드의 키에 속하지 않는 레코드의 값은 테이블에 속하지 않아야한다.

위의 테이블을 세 번째 정규 형식에 맞게 변환하면 다음과 같습니다.

Students:

Student# Advisor
1022 Jones
4123 Smith

Faculty:

Name Room Dept
Jones 412 42
Smith 216 42

Registration:

Student# Class#
1022 101-07
1022 143-01
1022 159-02
4123 101-07
4123 143-01
4123 179-04

이렇게 정규화를 하면 데이터베이스의 효율성을 높이고, 데이터의 일관성을 유지하면서도, 데이터 관리의 복잡성을 줄일 수 있다. 이는 당연하게도 데이터베이스를 설계할 때 우선적으로 고려해야할 중요한 부분이며, 이를 이해하고 적용시켜야한다.

 

 

참고 : https://learn.microsoft.com/ko-kr/office/troubleshoot/access/database-normalization-description

 

데이터베이스 정규화 설명 - Office

데이터베이스를 정규화하는 방법과, 형식을 정규화하는 대신 사용할 수 있는 여러 가지 방법을 설명합니다. 데이터베이스 원칙을 이해하려면 데이터베이스 원칙을 마스터하거나 문서에 나와

learn.microsoft.com

 

 

HTTP의 메소드

HTTP 프로토콜은 다양한 메소드를 지원하고 있다. 이 중에서도 가장 많이 사용되는 메소드는 GET, POST, PUT, DELETE, 등이 있는데, 이 중에서 GET과 POST는 각각 읽기(read)와 생성(create)과 관련된 메소드로, PUT과 DELETE는 각각 수정(update)과 삭제(delete)와 관련된 메소드다.

이와 같은 HTTP 메소드들은 대부분 CRUD 작업과 관련이 있다. 

 

 

 

CRUD(create/read/update/delete)

CRUD는 데이터베이스에서 자주 사용되는 개념으로, 데이터를 생성(Create), 읽기(Read), 수정(Update), 삭제(Delete)하는 기본적인 작업을 의미합니다.

 

이를 위해서 데이터베이스는 다양한 쿼리문을 제공한다.

 

아래는 각각의 CRUD에 해당하는 쿼리문 예시다.

 

  • CREATE (생성)

DB에서 새로운 데이터를 추가할 때 CREATE 쿼리문을 사용한다. CREATE 쿼리문은 어떤 데이터베이스를 사용하느냐에 따라 다르지만 대부분 다음과 비슷한 구문을 갖는다.

INSERT INTO <테이블 이름> (<컬럼1>, <컬럼2>, ... <컬럼n>) VALUES (<값1>, <값2>, ... <값n>);

여기서 <테이블 이름>은 데이터를 추가할 테이블의 이름이며, <컬럼>은 새로 추가하려는 레코드의 각 필드를 나타낸다.

<값>은 새로 추가하려는 레코드의 각 필드에 들어갈 실제 값을 말한다.

 

예를 들어, users라는 테이블에서 새로운 사용자를 추가하려면 다음과 같은 쿼리문을 사용하면 된다.

INSERT INTO users (name, email, age) VALUES ('John', 'john@example.com', 30);

 

  • READ (읽기)

DB에서 레코드를 검색하려면 READ 쿼리문을 사용한다. READ 쿼리문은 보통 다음과 같은 구문을 갖는다.

SELECT <컬럼1>, <컬럼2>, ... <컬럼n> FROM <테이블 이름> WHERE <조건>;

여기서 <컬럼>은 검색하려는 레코드의 각 필드를 나타낸다. <테이블 이름>은 데이터를 검색할 테이블의 이름이며, <조건>은 검색할 레코드를 선택하는 조건이다.

 

예를 들어, users라는 테이블에서 이메일이 'john@example.com'인 사용자를 찾으려면 다음과 같은 쿼리문을 사용한다.

SELECT name, email, age FROM users WHERE email='john@example.com';

 

  • UPDATE (갱신)

DB에서 레코드를 갱신하려면 UPDATE 쿼리문을 사용합니다. UPDATE 쿼리문은 다음과 같은 구문을 갖는다.

UPDATE <테이블 이름> SET <컬럼1>=<값1>, <컬럼2>=<값2>, ... <컬럼n>=<값n> WHERE <조건>;

여기서 <컬럼>은 변경하려는 레코드의 각 필드를 나타낸다. <테이블 이름>은 데이터를 검색할 테이블의 이름이며, <조건>은 변할 레코드를 선택하는 조건이다.

 

예를 들어, "Customers"라는 테이블에서 "CustomerID"가 1인 레코드의 "ContactName"을 "John Smith"에서 "Peter Lee"로 바꾸는 쿼리문은 아래와 같다.

UPDATE Customers SET ContactName = 'Peter Lee' WHERE CustomerID = 1;

 

  • DELETE (삭제)

DB에서 테이블에서 레코드를 삭제합니다. DELETE 쿼리문은 다음과 같은 구조를 가진다.

DELETE FROM <테이블 이름> WHERE <조건>;

 

예를 들어, "Customers"라는 테이블에서 "CustomerID"가 2인 레코드를 삭제하려면 다음과 같이 쿼리문을 작성하면 된다.

DELETE FROM Customers WHERE CustomerID = 2;

 

 

 

HTTP 메소드와 CRUD

이러한 관점에서 HTTP 메소드와 CRUD를 짝지어 봤다.

  • GET: Read
  • POST: Create
  • PUT: Update
  • DELETE: Delete

이렇게 메소드와 CRUD를 적절하게 짝지은 이유는 각각의 메소드가 수행하는 작업과 CRUD의 개념이 비슷하기 때문이다. 예를 들어, GET 메소드는 데이터를 읽어오는(read) 용도로 사용되기 때문에, CRUD의 Read 작업과 매칭된다.

마찬가지로, POST 메소드는 새로운 데이터를 생성(create)하기 위해 사용되기 때문에, CRUD의 Create 작업과 매칭된다.

POST와 PUT은 모두 데이터를 생성 또는 수정하는 용도로 사용된다.

그러나 POST는 새로운 데이터를 생성하는 데 사용되며, 서버가 해당 데이터의 위치를 결정한다. 반면, PUT은 특정 리소스를 업데이트하는 데 사용된다.

PUT은 리소스의 URI를 지정하고 해당 리소스의 내용을 업데이트한다. 즉, POST는 서버가 데이터 위치를 결정하지만, PUT은 클라이언트가 명시적으로 리소스 위치를 지정한다는 차이가 있다.

따라서, POST와 PUT은 크게 다른 용도로 사용되며, 사용 시에 목적에 따라 적절한 메소드를 선택해야 한다.

+ Recent posts