2011-04-12 4 views
2

확인 내가 달성하기 위해 필요한이 문제가 ... 그래서 여기 내 site좋은 데이터베이스 스키마는

내가 뭘해야 할 것은 내가 어느 쪽이다이 개 다른 제품을 가질 필요가 판매 된 각 제품입니다 업그레이드 또는 다운 그레이드.

그래서 거기에 각 제품은 3 종류의 표준, 비즈니스, 프리미엄 및 현재 제품들이 하나 증가 또는 가격 감소 ..

그래서 기본적으로 그들은 각각의 솔루션을 사용자 정의하는 무엇을 기반으로.이있다 그래서 내가 필요한 것은 여기 ...이 내 DB를 구성하는 가장 좋은 방법을 알아낼 내가 지금

$query = "SELECT p.ProductName, p.price, pc.quantity, p.ProductImage, p.Features 
      FROM productinfo as p 
       join preconfig_categories as pc on p.ProductID = pc.product_id 
       join preconfig as c on c.id = pc.category_id 
       join subcategory as sc on p.SubCategoryID = sc.SubCategoryID 
       WHERE c.code  = '{$type}_{$count}_{$class}' 
       order by sc.ordering"; 
나는 현재 구성되어있는 인 ProductInfo 테이블에 생각하고 있었는데

무엇을 당겨하는 데 사용하는 쿼리입니다 이

CREATE TABLE `productinfo` (
    `ProductID` int(11) NOT NULL AUTO_INCREMENT, 
    `ProductName` varchar(255) NOT NULL, 
    `ProductImage` varchar(255) NOT NULL, 
    `CategoryID` int(11) NOT NULL, 
    `SubCategoryID` int(11) NOT NULL, 
    `ProductBrief` varchar(255) NOT NULL, 
    `Features` text NOT NULL, 
    `Specifications` text NOT NULL, 
    `Reviews` text NOT NULL, 
    `Price` varchar(255) NOT NULL, 
    `Status` tinyint(4) NOT NULL, 
    `PartName` varchar(255) NOT NULL, 
    `skip_step` tinyint(1) DEFAULT NULL, 
    PRIMARY KEY (`ProductID`) 
) ENGINE=MyISAM AUTO_INCREMENT=164 DEFAULT CHARSET=latin1; 

처럼 그래서 기본적으로 내가 현재 제품이 무엇인지 알려 클래스를 사용하고 다른 두 필드는이 제품 1 세 추가 필드

class 
product1 
product2 

를 추가 떨어져 생각했다 다른 제품의 ProductID를 가지고있는 product2 ....이 제품은 작동 할 수있는 것처럼 보입니다. 그러나 더 나은 솔루션이 더 좋을 것 같아요. 조금 더 잘할 수 있습니다. 어떤 아이디어라도 강력하게 평가할 수 있습니다.

답변

4

제품 정보가있는 표가 하나 있으면 좋습니다. 제품 클래스 (Standard, Business, Premium)가있는 두 번째 테이블과 고객의 구매를 제품 정보 ID와 제품 클래스 ID에 매핑하는 세 번째 테이블.

나중에 새로운 제품 클래스 (프리웨어, 프리미엄 디럭스 등)를 추가해야하는 경우 제품 클래스 테이블에 추가 한 다음 매핑 테이블에 매핑 할 수 있습니다.

고객이 제품을 구매할 때 제품 ID 및 제품 클래스 ID를 매핑 테이블에 매핑합니다. 다운 그레이드하면 매핑 테이블을 업데이트하여 제품 ID를 다운 그레이드 된 제품 클래스 ID에 매핑합니다. 표시되는 제품이 표준 인 경우

+0

Mr. Horgan의 대답에 대한 확장 : ProductClasses 테이블에 Sequence 필드를 두어 제품이 업그레이드인지 다운 그레이드인지 식별 ​​할 수 있습니다. 전체 테이블을 추가하는 것은 추가 작업처럼 보일 수 있지만 추가 필드를 추가하려는 생각은 잘 확장되지 않습니다. Horgan이 지적했듯이 언젠가 네 번째 제품 수준이 거의 확실하게 필요합니다. –

+0

그래서 ProductClasses 테이블을 가지고 있다고 가정 해 봅시다. 어떤 필드가 가장 좋을까요? – Trace

+0

ProductClasses 테이블의 경우 ProductClassName (Standard, Business etc)과 ProductClassId INTEGER NOT NULL을 사용하는 것이 좋습니다. 매핑 테이블에서 ProductClassID, ProductTypeId 및 클라이언트 트랜잭션 ID 또는 클라이언트 ID를 매핑합니다. –

2

몇 가지 질문을 ...

  1. , 그냥 비즈니스와 프리미엄 제품을 보여주는가? 제품이 이미 최저 수준 인 경우 업그레이드 만 표시되며 프리미엄 인 경우 다운 그레이드가 표시됩니까? 그렇지 않은 경우 항상 하나의 업그레이드와 하나의 다운 그레이드를 표시하기 위해 다른 카테고리의 제품을 표시합니까?
  2. 다른 제품의 대안으로 어떤 제품이 연관되어 있는지 어떻게 결정됩니까? 프로그래밍 방식으로 결정되는 것입니까, 아니면 어떤 제품이 연결된 제품을 수동으로 선택 했나요? 관련 제품은 로직을 통해 결정 될 수있는 경우

, 나는이 제품 테이블에 추가 필드를 추가 하지을 고려 가치, 대신 쿼리를 통해 수요에 협회를 해결하는 것입니다 생각합니다. 제품의 일부 기준 (예 : 가격)이 변경되면 현재 참조하는 제품의 업그레이드 또는 다운 그레이드로 간주되지 않을 수 있으며 데이터 불일치 문제가 발생할 수 있습니다. .

--EDIT--

답장을 보내 주셔서 감사합니다. 따라서 제품 조합을 수동으로 선택하고 모든 제품에 2 개와 2 개의 연관이있는 경우 초기 디자인이 나에게 잘 어울립니다 (필자는 FK를 반드시 추가해야합니다). 그러나 언젠가 제품에 다양한 수의 연관성이있을 가능성이 있다고 생각하면 ... 한 제품에는 하나의 대안 만 있고 다른 하나의 제품에는 4 가지 대안이있을 수 있으므로 연관을 별도의 테이블에 넣을 수 있습니다. 뭔가가 ...

CREATE TABLE `associatedproduct` (
    `ProductID` int(11), 
    `AssociatedProductID` int(11) 
) 

그런 식으로 제품에는 정확히 두 개의 연관이 있어야합니다. 이 테이블에 제품 'A'가 업그레이드이고 제품 'B'가 프리미엄 업그레이드 인 두 제품 간의 연관성을 설명 할 수있는 열을 추가 할 수 있습니다.

+0

첫 번째 질문에 답하기 위해 ... 예. 제품이 표준 인 경우 비즈니스 및 프리미엄이 표시되고 제품이 비즈니스 인 경우 표준 및 프리미엄이 표시됩니다 ... 예 프리미엄이 그렇다면 응답이 다운 그레이드를 나타냅니다 – Trace

+0

두 번째 질문 .... 그래서 currenly 나는 모든 제품의 csv가 있고 csv는 프로그래밍 방식으로 그것의 대답이 아닌 다른 모든 제품을 가지고있다 ... 그들은 돌로 세팅되어있다. – Trace

관련 문제