_대문 | 방명록 | 최근글 | 홈피소개 | 주인놈 |
FrontPage › 컬럼과로우의이해
|
|
[edit]
1 사례1 #A라는 기업이 있다... 이 기업은 본사를 포함하여 100개의 매장이 있다. 그 회사에서 제조, 판매하는 제품의 종류는 1000개이다. 테이블을 다음과 같은 방식으로 디자인했다.
[edit]
2 무엇이 문제인가? #실제로 쌓이는 데이터는 “각 매장당 상품에 대한 일일 재고량” 이다. 그러므로 위와 같이 테이블을 만들었을 경우는 한 개가 로우에 각 컬럼당 매장이 되는 것이다. 비정규화도 문제가 되지만 현실적으로도 대전에 있는 매장과 부산에 있는 매장이 하나의 개체로 표현된 것이나 마찬가지가 된다. 즉, 개체집합의 의미가 너무 커져 버린다는데 가장 큰 문제가 있다. 하나의 로우는 "매장 전체"를 의미하는 것이 되어 버린다. 이렇게 되면 업무 단위가 매장 전체가 되어 버린다. 제대로 현실을 반영하지 못하는 것은 원천적인 문제이므로 현실과 컴퓨터 세계의 일치성을 가지게 하는 것이 중요하다.
필자는 아래와 같이 테이블을 만들어 보았다. 필요한 정보는 각 매장당 상품에 대한 일일 재고량이다. 그러므로 최근의 데이터를 중점적으로 가져오면 되는 것이다.
![]() 날짜에 DESC로 인덱스를 설정하고, ‘WHERE 날짜 = 현재날짜 AND ROWNUM >= 100’ 또는 하고 ‘SELECT TOP 100 ... WHERE 날짜 = 현재날짜’ 를 한다면 매우 빠르게 현재 날짜를 가져올 수 있다. 사용 패턴에 따라서 결합인덱스를 구성해야 할 수도 있다. 위 그림은 물리적(논리적) ERD이므로 외부키가 보인다. 이처럼 정규화가 안된다면는 복잡한 어플리케이션의 제작이 필요하다. 비정규화로 걸러진 것들에 대해서는 Ordering이 필수적이지는 않지만 개발 시 매우 편리한 속성이 되므로 이러한 약 엔티티 집합에는 일련번호를 부여하는 것도 좋다.
[edit]
3 단점만 있는가? #물론 단점만 존재하지는 않는다. 만약 이 테이블을 사용하는 어플리케이션이 1개 이고, 앞으로 이 테이블을 사용할 다른 어플리케이션이 존재하지 않으며, 매장수가 100개 이상 늘어나지 않는다면 문제의 테이블은 매우 이상적이다. 하지만 이런 경우라면 데이터베이스 시스템이 아닌 파일 시스템이 더 비용이 적게 들어갈 것이다.
[edit]
4 사례2 #다음과 같은 테이블이 있다. (사원번호는 기본키)
![]() 위에서 사원번호 1111인 이재학 사원은 주소가 대구이며, 부양가족은 가족1, 가족2, 가족3이다. 만약 가족4가 생긴다면 위와 같이 해야 할까? 과연 물리적으로 저장될 수 있을까? 당연히 아니다. 왜냐하면 기본키를 사원번호라고 했기 때문에 개체 무결성에 위배된다. 물론 업무규칙이 부양가족은 3명까지만 입력된다고 하면 위와 같은 테이블은 성립될 수도 있다. 어플리케이션에서의 복잡성이 늘어난다. 그러므로 변화와 복잡성을 줄이기 위해서는 다음과 같이 모델링 되어야 한다. 여기서 부양가족은 “약 엔티티 집합” 이 된다. 물론 관계상으로 존재의 유무가 결정되어 지기도 하지만 해당 조직이 성립하기 위해서 꼭 필요한 데이터들의 집합이라면 약 엔티티 집합은 아니다. 아래 그림은 Sybase PowerDesigner에서의 표현법인데 [부양가족]이 [사원]에 종속적임을 나타내는 것이다. 관계가 맺어져 있는데 외부키가 안 보인다고 투덜대지 말기를 바란다. 개념모델에는 외부키라는 개념이 없기 때문이다.
![]() 비슷한 실제 사례를 보도록 하자. A형, B형 테이블이 각각 있다. 많은 사람들이 어떤 것이 더 효율적인지 묻는 경우를 많이 볼 수 있었을 것이다.
![]() [고객] : "A처럼 하면 5건 읽어와야 하는데 B처럼 하면 1건만 읽어오면 되자나요.." [필자] : "ㅡ,.ㅡ;;" [필자] : "데이터베이스 이론 배우셨죠?" … 학교에서 데이터베이스 이론을 공부했거나 배웠는가를 물어보면 다음과 같은 말들이 나온다.
"해봐야 실무에서 필요 없다" "대학 때 배웠다" "배우지 않고 직접 실무에서 익혔다" "안 했다" 보통 이런 말들이다. 제일 열 받는 말은 "해봐야 실무에서 필요 없다" 라는 말이다. 테이블을 저렇게 만들어 놓고 말이다. 다른 분야는 내가 잘 몰라서 뭐라 말은 못하겠지만 데이터베이스는 이론이 없이는 절대 불가능하다. 지금 B형은 안 좋은 전형적인 1차 정규화 위배 테이블이라는 것을 모른다. 이거 일부러 이렇게 했냐고 하면 일부러 그렇게 했다고 한다. 왜냐고 물으면 건수가 줄어들기 때문이라고 한다. 어떤 개발자는 조인을 안해도 되지 않아서 그렇게 했다고 한다. 귀찮거나 조인에 대한 두려움 때문이다. 어이없다. 이런 사람들이 설계를 하니 부실할 수 밖에 없다.
[edit]
5 사례2 결론 #123
456 789
|
자기 자리의 중요성을 아는 사람은 절대로 외로움이나 쓸쓸함 따위를 느끼지 않는다. 나를 기억하고 있는 단 한 사람이라도 있다면 나를 필요로 하는 곳이 단 한 군데만이라도 있다면 그 사람은 매우 행복한 사람이 아닐까. 지금 이 자리의 자신으로부터 작지만 결코 작지 않은 새로운 역사가 시작되는 것이다. (안도현) |