2013-07-09 2 views
0

데이터베이스에 제품 데이터를 저장하고 싶습니다. 처음에 나는 product 테이블과 product info 테이블을 가지고 있다고 생각했지만, 모든 것을 하나의 테이블에 병합해야하는지 확실하지 않았습니다.이 데이터베이스 데이터를 하나의 테이블로 병합해야합니까?

Coke - 355 ml 

Product.Name = Coke 
ProductInfo.Size = 355 
ProductInfo.UnitType = ml 

Coke - 1 Liter 
Product.Name = Coke (would not be duplicated...just for illustration purposes) 
ProductInfo.Size = 1 
ProductInfo.UnitType = L 

그때 물론 내가 "이름"을 두 번 중복되지 않을 것으로 이런 짓을합니다. 내 계획은 그때 내가 할 수있는 모든 주어진 항목에 대한 관계의 많은 측면을 보는 것만 큼 쉽게 동일한 제품의 모든 크기를 찾을 수있었습니다.

모든 데이터가 사용자에 의해 입력되고 입력됩니다. 누군가는 "Coke a Cola"대신 "Coke a Cola"라고 쓰고 지금은 "Coke a Cola"라는 제품을 입력했는지 확인하려고 할 때와 같이 2 가지 제품으로 취급 될 것입니다. "콜라"도.

이것은 아마도 부분 일치하는 것처럼 보일 수도 있습니다.하지만 누군가가 "콜라"가 될 일반 브랜드를 갖고 있으면 일치 할 것입니다.

이것은 내가 데이터를 별도로 유지할 필요가 없다고 생각하게 만듭니다. 어쨌든 모든 것이 그것이 결국 자신의 제품이 될 좋은 기회 인 것처럼 보입니다.

+0

수행 할 작업을 결정 했습니까? – Smandoli

답변

2

두 가지 방법 모두에서 장점이 있습니다. "Product"라고 부르는 테이블과 별도로 "Brand"를 호출하고 "ProductInfo"는 실제 "Product"테이블이며 해당 브랜드의 실제 판매 가능한 품목에 대한 정보를 포함합니다 (12 온스 캔 또는 리터 병 콜라).

대체로 브랜드, 제품 (다이어트 콜라 또는 카페인없는 콜라와 반대되는 것으로 콜크 클래식) 및 UnitSize (캔 또는 병)로 표준화 할 수 있습니다. 이들은 콜라 클래식뿐만 아니라 다이어트 콜라 , 펩시 또는 닥터 페퍼).

이 데이터를 비정규 화하는 경우 사물의 이름 지정 측면에서 많은 부분을 복제하지는 않지만 대용량 단위 데이터를 복제하고 있습니다. 문제는 제품 레코드의 일관된 브랜딩을 보장하는 것이 더 유용한 지 여부입니다 (비정규 화는 제품에 동일한 브랜드가 있는지 확인하기 위해 다른 수단이 필요함을 의미 함) 또는 두 테이블 간의 조인을 피하는 것입니다. 일반적으로 색인화 된 필드 사이에 조인 할 수있는 경우 작습니다.

+0

+1 모든 위대한 포인트 – Smandoli

+0

나는 브랜드 테이블을 이미 기본적으로 갖고있다. 브랜드는 많은 ProductInfo를 가질 수있는 많은 제품을 가지고있다. 정보에는 크기, 바코드 및 내용이 포함됩니다. ProductInfo의 모든 희망은 모든 "Coke Classic"과 모든 크기를 쉽게 찾을 수 있다는 것입니다. – chobo2

0

Coke에 두 개의 테이블이있는 유일한 세부적인 이유는 패키지와 상관없이 동일한 속성을 갖는 경우입니다. 지금 당장은 그런 속성이 보이지 않습니다. 그래서 하나의 테이블이 그것을 다룹니다. 당신은 말할 수 있습니다. "하지만 나는 미래의 어떤 것을 생각할 것입니다." 이것이 두 테이블을 만드는 이유 일 수 있습니다. 그러나 (데이터베이스 스키마에 대한 많은 종류의 변경과 달리) 필요가 있음을 알게되면 나중에 두 테이블로 나누기가 너무 어려울 수 없습니다.

거의 일치하는 레코드를 만드는 실수에 대한 요점을 봅니다. 나는 이것이이 테이블 레벨에서 고려 사항이 아니라고 생각하며 레코드 편집의 한 부분으로 다루어야한다고 생각합니다.

+0

희망은 2 개의 테이블로 모든 제품을 가져 와서 제품의 많은 테이블을보고 그 제품의 다른 모든 크기를 찾을 수 있다는 것입니다. 그런 다음 사용자에게 다른 크기를 추천 할 수는 있지만 실제로 효과가 있을지 잘 모르겠다 고 말한 것 같습니다. – chobo2

0

이 작업을 수행하는 가장 좋은 방법은 ID 테이블, SKU 번호, 간단한 설명, 활성 테이블 등과 같은 필드가있는 자체 테이블에 제품 또는 항목 테이블을 갖는 것입니다. 그런 다음 "많은"테이블에 ID에 조인 할 수있는 다른 항목 속성. 일대 다 관계. 또한 사용자 입력 문제를 해결하기 위해 인벤토리 선택 항목 또는 항목 선택 항목과 연결된 콤보 상자가 있습니다. 이렇게하면 데이터 무결성을 강화할 수 있습니다. 글쎄, 그게 내가 해냈을거야.

This post has some helpful links on DB design

+0

나는 SKU 번호를 저장하지 않는다. (사용자가 추가해야 할 다른 번호 일 뿐이므로 아마도 더 많은 사람들을 꺼 버릴 것이다). 나는 바코드를 저장하고 그 문제는 "코크스"의 각 크기가 다른 바코드를 갖기 때문에 고체 조인 조각으로 exepct라는 이름을 사용할 필요가 없습니다. – chobo2

관련 문제