2010-05-25 3 views

답변

1

, 그것은 가난한 디자인

//table that holds shopping cart items that customer choose(not press checkout and order //them) 

**shopping_cart** 
{ 
id (int) 
product_id (int) fk 
product_quantity (int) 
customer_user_id (int) fk 
} 

//table that holds product order data in time of checkout.(i hold them because supplier //can change after time products attributes value add some attributes or delete and change //the price of product) 

**order** 
{ 
id (int) 
product_id (int) fk 
customer_user_id (int) fk 
} 


//table that connect order to attribute table for products attributes value in the moment //of checkout 

**order_attributes** 
{ 
id (int) 
order_id (int) fk 
attribute_id (int) fk 
} 

//main product table 
**product** 
{ 
id (int) 
sku (int) 
product_name (varchar) 
supplier_user_id (int) fk 
} 

//connection table many to many 
**product_attributes** 
{ 
id (int) 
product_id (int) fk 
attribute_id (int) fk 
} 

//table that holds products attributes (price, weight, color + new attributes that user //will create) 

**attribute** 
{ 
id (int) 
product_id (int) fk 
attribute_name (varchar) 
attribute_value(varchar) 
} 

감사 :

기본 쇼핑 카트에 대한 나의 데이터베이스 설계 : 내 데이터베이스 설계의 일부를 봐 주시기 바랍니다 테이블 whe는 EAV 테이블이며 성능 문제를 일으킬 수 있습니다. 제품에 대해 원하는 속성을 실제로 정의 할 시간을 가지십시오. 대부분의 제품 (색상, 크기, 단위 (10 개 패키지, 단일 항목 등)의 대부분은 실제로 simliar입니다.) EAV가 최후의 수단입니다 ..

. 주문 에 OrderID :. 나중에 도로 아래로 제품 가격이 변경

내 구조가 뭔가를해야만처럼 될 경우 등 가격의

스토어 세부 사항은 orderdetail 테이블에 당신은 가격이 변경하지 않으 , 날짜, 고객 ID 주문 정보 주문 ID, 부품 번호, 부품 번호, 제품 이름, 수량, 가격, 단위, 색상, 크기, 기타 속성 주문 노트 ORDER_ID주의

제품 PRODUCT_ID, PART_NUMBER, 제품 _, COMPANY_ID, 제품 가격, 색상, 크기, 단위

더 나은 (당신이하는 당신이 일반적으로하지 않습니다 속성의 수백하지 않는 한) 널 (null) 열을 가질 때 일부 제품에는 동일한 attrubutes가 없음) 제품에 대한 완전한 사양을 원하면 대용량 varchar 파일에 전체 텍스트 색인을 넣는 것을 고려하십시오. 이것은 EAV 테이블보다 나은 성능을 발휘해야합니다.

+0

대단히 감사합니다! – Yosef

+0

Magento가 EAV 테이블을 사용하는 이유는 무엇입니까? 또한 나의 신청에서 공급자가 그 (것)들을 정의하기 때문에 나는 제품의 속성을 모른다. 만약 모든 공급자가 새로운 속성을 추가 할 수 있다면 테이블 제품은 많은 컬럼을 갖게 될 것입니다. – Yosef

+0

EAV 테이블은 성능 저하 요인이며 코드를 작성하기가 어렵습니다. 파트에 얼마나 많은 attriub가 있는지 알지 못하면 테이블에 조인 할 횟수를 모릅니다. 모든 쿼리는 여러 테이블을 하나의 테이블에 조인하므로 잠금 문제가 발생하며 일반적으로 실제 작업 부하가 있으면 성능이 심각해질 수 있습니다. 나는 공급 업체가 칼럼을 추가하도록 허용하지 않을 것이다. 부품을 선택하는 데 필요한 특성 (색상, 치수, 무게, 단위 등)이 여섯 가지가 있습니다. 나머지는 설명 적이며 전체 텍스트 색인이있는 하나의 큰 필드에 저장해야합니다. – HLGEM

2

흠. 디자인에서 제거 할 수있는 두 개의 테이블, order_attributes, product_attributes가 있습니다. 그렇지 않으면 선택 쿼리가 너무 많은 테이블에서 조인 할 필요가 매우 느립니다. 특성을 주문 W 제품 테이블의 컬럼으로 저장할 수 있습니다.

+0

대단히 감사합니다! – Yosef

+0

당신이 내 대답을 좋아한다면 너는 그것도 올바른 것으로 설정할 수 있습니다 lol –