2011-09-21 5 views
0

읽어 주셔서 감사합니다. 다른 제품 옵션을 제공하는 맞춤 CMS를 수정하려고하며 이러한 옵션의 조합에 따라 다양한 특성을 설정할 수 있습니다. 이것들은 mySQL 데이터베이스에서 가져옵니다.직교 좌표 결과를 SQL에 저장하고 있습니까?

Colour   Size  
------   ---- 
Red   Small 
Red   Medium 
Blue   Small 
Blue   Medium 

각 색상과 크기가 각각있을 것입니다 때문에, 1 = 빨간색 = 2 파란색과 작은 = 3 = 4 색 중간 크기 고유 ID를 할 것이다 : 예를 들어, 티셔츠있을 수 있습니다 부모님, 그래서 색상 = 1, 크기 = 2

현재 각 조합을 식별하는 데이터베이스의 데이터베이스 테이블에 문자열을 저장하고 있습니다 (예 : 빨간색 + 작은 & 1 = 1 & 2 = 3)). 이 문자열은이 옵션 조합에 가격, 주식 코드 등의 다양한 속성을 연결합니다.

그러나 새 옵션 그룹을 슬리브 길이에 추가하려는 경우 문제가 발생합니다. 이 순간에는 문자열을 통과하고 새로운 옵션을 포함하도록 문자열을 변경해야한다는 것을 의미합니다. 이것은 이것을하기에 매우 비효율적이며 오랜 바람을 피운 방법처럼 보입니다!

내 궁금증이 있습니다. 제가 할 수있는 더 좋은 방법이 있습니까? 추가 할 수있는 옵션 그룹의 수에 대한 실질적인 제한이 없으며 언제든지 새로운 옵션 그룹을 추가 할 수 있어야합니다.

미리 도움을 주셔서 감사합니다.

스튜어트

+0

http://stackoverflow.com/questions/7337041/how-can-i-generate-all-possible-outcomes-of-a-dynamically-loaded-database/7337500#7337500 – ajreal

답변

1

내가 왜 처음에 그것을 저장할 것이다 당신 요구와 대신 카운터 것인가?

카티 전 곱은 컨트롤러 문제이며 도메인 모델은 아닙니다. 도메인 모델 (데이터베이스)은 데이터를 표준화 된 방식으로 유지하거나 가능한 한 가깝게 유지해야하며 데이터베이스 시스템이 필요에 따라 조인을 수행하도록해야합니다 (SQL에서 inner join). 이것이 바로 최적화 된 작업입니다 처음에는

+0

참으로. 데이터를있는 그대로 놔두고 데이터를 가져올 때 CROSS JOIN을 수행하십시오. (@stukerr : INNER JOIN과 CROSS JOIN이 MySQL에서 상호 교환 가능하다는 문제는 제외하고, 전통적으로 Cartesian 제품을 명시 적으로 생성하는 데 사용되는 CROSS JOIN이므로 원하는 구문을 검색하는 데 도움이 될 수 있습니다. Blindy가 제안한대로 원하는 정적 데이터 테이블을 생성 할 수 있습니다. –

+0

내가 필요하다고 생각하는 이유는 (조금 깁니다!) 실제 그룹 (예 : 색상)과 옵션 (예 : 빨간색) 데이터베이스의 테이블에 이미 저장되어 있지만이 옵션을 조합하여 단일 주식 코드를 사용하는 시스템에이 묶어 오전 (예 : 빨강/Small 주식 코드 1001, 빨강/중간 1002, 파랑/Small 1011 등)입니다. 드롭 다운 (색상, 크기 등 하나)에 나열 될 수 있도록 옵션을 별도로 저장해야하지만 가격, 수량 등과 같은 정보를 보유하고 있으므로 주식 코드로 연결하는 방법이 필요합니다. - 나는 그것이 의미가 있기를 바랍니다! – stukerr

+0

@stukerr, 'comboID = (colorID << 8)와 같이 병합 된 ID를 만드는 것이 좋습니다. sizeID'. 저의 요점은 프리젠 테이션 문제이며 데이터베이스 백업 문제는 아닙니다. – Blindy

관련 문제