2010-05-20 3 views
4

question을 읽은 후, 나는 비정규 화가 단순성을위한 해결책이 아니라는 것을 알게되었습니다. 이 사건은 어쩌고?단순화를 위해 역 정규화 : Ungood idea?

나는 기사 목록에 기사가 게시 될 뉴스 기사가 있습니다. 후자는 테이블과 다 대다 관계에 의해 정규화 된 방식으로 표현 될 수 있습니다 (크로스 테이블을 통해 생각합니다). 하지만 간단한 해결책은 게시 할 기사 (publish_to_site_1, publish_to_site_2 등)에 대한 수많은 부울을 넣는 것입니다. 가정 사이트는 다음과 같습니다 수가

  1. 작은
  2. 가 이름

이 여전히 끔찍한 생각이 제외하고, 시간

  • 더 필드 자신이없는 동안 변경되지 않습니다? 다 대다 관계는 다소 성가신 것처럼 보이지만 전에 이런 식으로 해본 적이 있습니다 (그리고 성가신 것 같았습니다).

    참고 : 나는 레일에서 이렇게하고 있습니다. 고통스럽지 않습니다. 반면에 메타 프로그래밍을 사용하면 이와 같은 작업을 간단하게 수행 할 수 있습니다.

    (1..5).each { |site| do_something(article["publish_to_site_#{site}".to_symbol]) } 
    
  • +6

    +1의 제목이 "불량"인 경우. – ponzao

    +0

    @ponzao, 예, 그냥 많은 불씨에 관한 질문에 딱 맞는 느낌이 들었습니다. –

    답변

    3

    이러한 조건이 실제로 충족되면 아니오, 끔찍한 생각은 아닙니다.

    사실 이것은 비정규 화도 아닙니다. 비정규 화는 일반적으로 성능을 위해 정보를 중복 저장하는 것을 의미합니다. 귀하의 예에서는 사이트 자체에 필드가 없으므로 중복 저장하지 않습니다. 미래에 사이트의 추가 필드를 저장할 수있는 기회를 박탈하는 것입니다 (정규화를 위반하거나 데이터베이스를 다시 디자인하지 않고).

    article      show_on_stackoverflow show_on_my_blog 
    ----------------------------------------------------------------------- 
    Denormalize for Simplicity    YES      NO 
    More simplicity      YES      YES 
    ... 
    

    그러나 이것은 (중복) 확인되지 않습니다 : :

    그래서,이 OK (정규화) 당신은 논리 값 "을 생각하면

    article      show_on_stackoverflow stackoverflow_mainpage_url show_on_my_blog my_blog_mainpage_url 
    ------------------------------------------------------------------------------------------------------------------------------ 
    Denormalize for Simplicity    YES    http://stackoverflow.com   NO   http://my.blog.url  
    More simplicity      YES    http://stackoverflow.com   YES   http://my.blog.url 
    ... 
    
    +1

    사실입니다.하지만 변화가 있다면 거의 고통스럽지 않을 것입니다. 그 나쁜. –

    +1

    정확합니다. 앞으로 추가 필드가 필요할 가능성이있는 경우 나중에 모든 것을 다시 설계해야하는 것보다 조인을 더 많이 투자하십시오. – Heinzi

    +0

    나는 당신이 그 질문을 액면 그대로 받아 들였고, 분명히 나를 가르치지 않았다고 생각한다 : 당신은 아마 현실을위한 그러한 조건들을 결코 만날 수 없다. 데이터는 데이터 등을 끌어들이는 경향이 있으므로 "show_on_so"는 필연적으로 다른 필드를 가져옵니다 ... 그래서 중복성이 생기고 (두 번째 예와 같이) 비정규 화되어 나쁘면 간단합니다. –

    0

    하는 사이트 - 기사 --될 것입니다 "isGreen", "hasHair", "isBipedal"과 같은 기본 데이터의 속성으로 "게시"된 경우 단일 테이블은 테이블 Green{<true>, <false>}에 대한 외래 키를 갖지 못하는 방식으로 정규화됩니다.

    분명히, 당신의 3 가지 조건이 계속해서 성립되지 않는다면, 다음 사람은해야 할 일이 아주 적지 만 가능한 한 간단하지만 단순하지는 않습니다.

    +0

    죄송합니다, 명확하지 않았습니다. 다른 테이블은 Characteristics (귀하의 예에서)이고 "green"및 "bipedal"과 같은 문자가 있습니다. –

    0

    개인적으로 나는 비표준 적이 아닐 것이라고 생각합니다. 제 의견으로는 SQL에 익숙하다면 하나의 n : n-relation만으로는 가입하기가 번거롭지 않습니다. 성가신 일은 여러 쿼리에 대해 비정규 화 된 구조를 사용하는 것입니다. 예를 들어, 기사가 게시 된 모든 사이트의 목록을 절대로 필요로하지 않습니까? 내가 끔찍한 당신의 접근 방식을 전화 싶지만, 나는 보통 행복하게 다른 일을, 정규화 된 데이터를 선호

    되지 않음 :

    건배 마티아스

    +0

    은 메타 - 루비 (Ruby) 관련 자료를 포함하도록 질문을 변경합니다. –

    2

    가정이 비현실적 조인.

    따라서 "이러한 조건이 실제로 만족된다면 아니오, 끔찍한 생각이 아닙니다." : 예, 그것은 끔찍한 생각입니다.

    +0

    내 경우에도 같은 결론에 도달 했으므로 투표 할 것입니다. (실제로 # 3도 대부분 현실적이라고 생각하지 않습니다.)하지만 여전히 조심해야한다고 생각합니다. 그것이 사실이라면 비현실적이지 않습니다. 사실 그것은 매우 드문 일이지만 만족할만한 사례 (아마도 몇 가지 법적 기준을 토대로)를 가질 수 있습니다. –