_대문 | 방명록 | 최근글 | 홈피소개 | 주인놈 |
FrontPage › 집합적사고방식
|
|
[edit]
1 집합적 사고방식의 분류 #집합적 사고방식은 우선 2가지로 분류하여 살펴볼 수 있다. 그 2가지는 아래와 같다.
[edit]
2 SQL 작성시 집합적 사고방식 #그렇다면 진짜로 과연 집합적으로만 생각하면 SQL을 잘 작성할 수 있을까? 절대 아니라고 본다. 오히려 절차적인 사고방식을 섞어 SQL을 작성해야 하는 것이 더 좋은 SQL을 만들 수 있다. 물론 전제조건이 있다. 그 전제 조건은 DBMS의 내부동작을 어느정도 알고 있어야 한다는 것이다. 우찌되었건 DBMS도 절차적인 언어로 작성되었고, 절차적인 언어로 처리되기 때문이다. (당장 이해가 가지 않아도 차차 살펴보다 보면 알게 된다. 이쯤해두자. 라고 하고 싶은데.. 사실 이게 상당한 진입장벽이다.) 다음의 소스를 보자.
--MSSQL2k, pubs..titles SELECT type , MAX(price) MaxPrice FROM titles GROUP BY type --결과 type MaxPrice ------------ --------------------- business 19.9900 mod_cook 19.9900 popular_comp 22.9500 psychology 21.5900 trad_cook 20.9500 UNDECIDED NULL 만약 여러분이 위의 결과에 title까지 조회하고 싶다면 우짤것인가? 초보들은 분명히 다음과 같이 SQL을 작성할 것이다. 그리고는 문법에 맞지 않는다는 에러 메세지를 보고 또 한번 실망할 것이다.
--Error!! SELECT type , title , MAX(price) MaxPrice FROM titles GROUP BY type --원하는 결과가 아님 SELECT type , title , MAX(price) MaxPrice FROM titles GROUP BY type , title 그럼 어떻게 하지? 여러분들이 고민해보라. (만약 모르는 사람이 있다면 다음의 소스를 보기 전에 며칠이고 고민해 봐야한다. 그래야 실력이 늘어난다. 그리고 느낄 수 있다.)
--성능을 구지 따져본다면 좋지는 않다. 하지만 현재는 데이터가 더이상 들어올 것이 아니니까...전혀 상관이 없다. --만약 성능까지 고려를 한다면 또 다른 고민을 해야 할 것이다. --옛날 방식이긴 하지만 이해를 돕기 위한 것이니 그냥 봐줘욧~ SELECT B.type , A.title , B.MaxPrice FROM titles A INNER JOIN ( SELECT type , MAX(price) MaxPrice FROM titles GROUP BY type) B ON A.type = B.type AND A.price = B.MaxPrice --결과 type title MaxPrice ------------ -------------------------------------------------------------------------------- --------------------- trad_cook Onions, Leeks, AND Garlic: Cooking Secrets of the Mediterranean 20.9500 psychology Computer Phobic AND Non-Phobic Individuals: Behavior Variations 21.5900 popular_comp But IS It User Friendly? 22.9500 mod_cook Silicon Valley Gastronomic Treats 19.9900 business The Busy Executive's Database Guide 19.9900 business Straight Talk About Computers [edit]
3 DB모델링시 집합적 사고방식 #데이터모델링시는 필요한 집합적 사고방식은 수학시간에 집합의 예를 생각하면 쉽게 알 수 있다. 예를 들어 보자.
두 번째로 '사원'을 보자. '사원'을 위와 같이 정의한다면 해석하기에 따라 근무만 A사에서 하면 되는 것으로 볼 수 있다. 그러면 B사에서 파견나와 있는 김대리도 정의에 포함되고, 작년에 퇴사한 이부장도 정의에 포함되며, 서버 유지보주 업체에서 정기 점검차 왔던 박과장도 사원의 범주에 속하게 된다.
이처럼 데이터 모델링을 할 때는 애매모호한 정의를 해서는 안 된다. 물론 데이터 모델링뿐만 아니라 소프트웨어 Life Cycle동안에 모든 활동이 명확히 정의되는 것이 좋다. 많은 데이터 모델링에 책에서 '명사'를 언급하는 이유가 바로 이런 이유이다. 명사는 개념의 언어적인 표현하였다. 다음의 아리스토텔레스의 명사의 정의이다.
보다 깊숙히 알고 싶다면 필자는 아리스토텔레스의 ' ![]() |
인간을 현재의 모습으로 판단한다면 그는 더 나빠질 것이다. 하지만 그를 미래의 가능한 모습으로 바라보라 그러면 그는 정말로 그런 사람이 될 것이다. (괴테) |