데이터 무결성data integrity를 향상시키고 데이터 중복data redundancy를 줄이기 위해 normal form으로 일치시켜주는 것을 말한다.
Normalization은 columns와 table간 relation을 구성하는것을 수반한다.
→ 데이터 무결성 제약조건을 통해 그들의 dependency를 적절하게 강제하기 위해.
이는 몇가지의 formal rule을 따르면 달성된다.
→ synthesis(creating a new database design) 또는 decomposition(improving an existing database design)을 통해서
1NF(first normal form)을 넘어서 정규화를 하는 것의 목적
정규화가 잘되면 잘못 변경하려고 할때나 다른 경우에 예외처리를 잘 해준다.
Update anomaly
ex)
//예시코드.
SELECT
advisor_name,
advisor_department,
advisor_email
FROM college
WHERE advisor_name = 'Sommer';
UPDATE college
SET advisor_email = '[email protected]'
WHERE advisor_name = 'Sommer' AND advisor_department = 'Statistics';
Insertion anomaly
table에서 primary key를 사용하지 않는경우 생기는 문제점은 또 있다. 바로 데이터는 primary key를 알기 전까지는 데이터를 집어넣지 못한다는 것.
ex)
대학교에서 새로운 지도교수를 고용했다고 하자. 교수의 이름은 Algorithm이고 그의 이메일은 [email protected]이다.
불행히도 그는 아직 어떤 학생에게도 배정되지 않았기때문에 database table에 추가할수가 없다.
우리는 이 교수를 DB에 추가하기 위해서는 Primary key(개인 학생과 연결)가 필요하다.
방법 중 하나는 Fake key를 쓰는것.
INSERT INTO college
(student_id, advisor_name, advisor_department, advisor_email)
VALUES
(-1, 'Algorithm', 'Computer Science', '[email protected]');
하지만 이는 좋은방법이 아니다.
학생을 count할때 unique student의 수로 단순하게 샐 수 없어지기 때문이다.
또한 교수에게 학생이 배정되고나면 이 테이블을 제거해야하므로 기억해놔야 하는 문제가 생긴다.
Deletion anomaly
해결방안
ex)전공에 따른 학생수를 조사할때
WITH majors AS(
SELECT major_1 as
major
FROM college
UNION ALL //이거 뭐야..
SELECT major_2 as major
FROM college
WHERE major_2 IS NOT
NULL
)
SELECT major, count(*)
FROM majors
GROUP BY major
ORDER BY count DESC;
Null값을 무시하고, major_1과 major_2를 같이 봄.