0

나는 Denormalizaition 정의를 진행 중이었고 여분의 데이터를 추가하는 것이 어떻게 복잡한 결합을 제거 할 수 있는지 궁금합니다.중복 데이터를 추가하면 어떻게 비정규 화에서 복잡한 결합을 제거 할 수 있습니까?

+2

데이터가 (완전히) 비정규 화 된 경우 아무 것도 참여할 수 없습니다. –

+0

@Oilver 간단한 질문입니다. 모든 것이 비정규 화 된 데이터에서 하나의 테이블에 있습니까? –

+0

그리고 당신이받은 "비정규 화"의 정의는 무엇입니까? – philipxy

답변

0

는 다음과 같은 두 가지의 관계를 고려

Department (department_id PK, department_name, manager_employee_id) 
Employee (employee_id PK, employee_name, department_id) 

가 관리자의 이름과 함께 직원 이름의 목록을 얻으려면, 우리는 다음과 같은 쿼리 필요 다음과 같은 경우, 지금

SELECT e.employee_name, m.employee_name AS manager_name 
FROM Employee AS e 
INNER JOIN Department AS d ON e.department_id = d.department_id 
INNER JOIN Employee AS m ON d.manager_employee_id = m.employee_id 

을 우리는 이행 함수 종속성 employee_id -> department_id -> manager_employee_id -> employee_name을 직원 테이블에 비정규 화합니다. 우리 테이블은 다음과 같습니다.

Department (department_id PK, department_name, manager_employee_id) 
Employee (employee_id PK, employee_name, department_id, manager_employee_id, manager_name) 

사실상 중복되지 않으면 신중하게 동기화되지 않으면 데이터 일관성이 발생할 수 있으므로 이는 좋은 설계가 아닐 수도 있습니다. 그러나이 예에서는 위험을 무시합니다.

SELECT employee_name, manager_name 
FROM Employee 

중복이 더 간단하게 표현 될 수있는 몇 가지 질의를 할 수 있지만이 데이터 불일치의 위험을 도입 할 수 있습니다 : 새 테이블로

, 우리는 지금과 같이 직원 및 관리자 이름 목록을 얻을 수 있습니다 신중하게 고려하고 통제해야 할 필요가 있습니다. 리던던시는 더 많은 스토리지 공간을 필요로하며, 적은 수의 행이 디스크의 페이지에 들어갈 수 있으므로 쿼리 속도가 느려질 수 있습니다. 반면에 조인 또는 계산을 제거하여 쿼리를 빠르게 수행 할 수 있으며 심지어 일관성을 유지하는 데 사용할 수도 있습니다. 각 사례는 자체 장점으로 고려해야합니다.