2012-05-08 5 views
0

주문을 추적하기 위해 주문 시스템을 만들고 있습니다. 약 60 개 정도의 제품이 있으며, 각각 자체 가격이 있습니다. 시스템은 매우 복잡하지는 않지만 각 제품이 얼마나 많은 수의 제품을 주문 하는지를 제출할 수 있어야합니다.MySQL - 더 많은 테이블을 깰 수 있습니까?

내 질문은, 그것이 '주문'테이블이 더 효율적입니다, 그들은 .. 예를 주문시 각의 얼마나 많은을 대표하는 각 제품을 나타내는 열 및 숫자 값 :

orders 
    id 
    product_a 
    product_b 
    product_c 
    etc... 

또는

여러 테이블을 여러 테이블에 나누어서 다 대다 테이블로 결합해야합니다. 다음과 같을 수도 있습니다.

customers 
    id 
    name 
    email 

orders 
    id 
    customer_id 

products 
    id 
    product 

orders_products 
    order_id 
    product_id 

답변

0

향후 기능과 확장을 위해 항상 빌드하십시오. 여기 또는 바로 가기는 나중에 모든 것을 다시 설계하고 리팩토링해야 할 때 나중에 물어 오는 것처럼 보입니다. 정규화를 살펴보고 관계형 DB에서 모든 독립 요소를 분리하려는 이유를 찾아보십시오.

나는 종종 "이 방법이 더 간단 할 때 별도의 테이블을 만드나요?"라고 묻습니다. 그런 다음 "오, 우리가 사용할 이런 종류의 다른 유형이 없습니다"라고 나중에 상기 시키십시오. 다 대다 (many-to-many)를 필요로하는 기능으로 미래의 기능을 고려하지 않음으로써 구석에 당신을 그려 넣었다는 것을 깨닫지 못합니다. 데이터 구조를 이해하지 못하는 사람들은 이것을 깨닫지 못하고 시스템 요구 사항을 지정하는 데 상당히 어려움을 겪습니다. 이것은 대개 DB가 커지기 시작할 때 발생하며 데이터의 하위 집합 만 볼 수 있기를 원합니다. 편평한 DB 란 여러 욕구를 처리 할 수있는 열을 추가하는 것을 의미하는 반면, 다 대다 (many-to-many) 조인 테이블은 몇 줄의 코드로이를 수행 할 수 있습니다.

1

두 번째 샘플에 표시하는 것처럼 분리 할 수 ​​있습니다. 이렇게하면 응용 프로그램의 확장 성이 향상되고 여전히 효율적입니다.

0

두 번째 방법을 사용합니다. 당신이 말한 것처럼 DB가 단순하다면, 그 차이는 속도면에서 그리 중요하지 않을 수도 있습니다. 그러나 두 번째 방법은 새로운 아이디어를 얻고 응용 프로그램에 추가 할 때 재사용/향상이 더 효율적이며 쉽습니다.

0

첫 번째 사례에 대해 알아야 할 점은 각 제품에 대해 고객에게 준 가격과 할인을 어떻게 추적 할 것입니까? 그리고 지금 추적 할 계획이 없더라도 이것은 매우 일반적인 일이므로 그러한 변경을 요청할 수 있습니다.

정규화 된 스키마를 사용하면 몇 가지 필드를 추가하면됩니다.

관련 문제