상품 분류표의 디자인
7013 단어 전자 상거래
상품 분류표의 디자인
한가할 때 전자상거래에서 가장 자주 만나는 상품 분류표의 디자인 문제를 생각해 보았습니다. 사고 결과는 다음과 같습니다. 여러분의 평가를 환영합니다.
상품 분류표의 디자인
1 데이터베이스 디자인
가장 자주 사용하는 두 개의 표, 간단한 필드
1.1 분류표
코드 코드 규칙
1층 2위 10-99
기타 3위 100-999
1.2 상품 정보표
품목 검색용 Keywords 필드
Belong_카테고리는 분류된 상품을 검색하는 데 사용되며, 외부 키는 분류표의 코드 필드이기 때문에 특정한 종류의 모든 상품을 검색하기 쉽고belongcategory의 값은 이 상품이 어떤 종류에 속하는지 쉽게 지도할 수 있다.
2 구성 데이터
2.1 구조 트리의 분류 테스트 데이터
만들어진 데이터
코드
Java 코드private int totalLevel = 5;
private int brotherCount=10;
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
@Rollback(false)
public void testSave() {
insertTestData(brotherCount);
}
private void insertTestData(int brotherCount) {
insertFirstLayer(brotherCount);
for (int i = 0; i < brotherCount; i++)
insertOtherLayer(10 + i, brotherCount, 2);
}
private void insertFirstLayer(int brothersCount) {
for (int i = 0; i < brothersCount; i++) {
GoodsCategory first = new GoodsCategory();
first.setName("The first layer" + i);
first.setCode(String.valueOf(10 + i));
first.setParentCode(String.valueOf(0));
this.categoryDao.save(first);
}
}
private void insertOtherLayer(long parent_code, int brothersCount, final int currentLevel) {
int currentLevel_tmp = currentLevel;
if (currentLevel > totalLevel)
return;
logger.debug("parent_code==" + parent_code);
for (int k = 0; k < brothersCount; k++) {
GoodsCategory otherlayer = new GoodsCategory();
long code_tmp = 100;
String current_code = String.valueOf(parent_code) + String.valueOf(code_tmp + k);
otherlayer.setName("The " + currentLevel_tmp + " layer");
otherlayer.setCode(current_code);
otherlayer.setParentCode(String.valueOf(parent_code));
this.categoryDao.save(otherlayer);
insertOtherLayer(Long.parseLong(current_code), brothersCount, currentLevel_tmp + 1);
}
}
@Test
public void testGetAllCategorys() {
// fail("Not yet implemented");
long totalRecordCount=0;
for (int i = 1; i < totalLevel+1; i++) {
totalRecordCount+=Math.pow(brotherCount, i);
}
System.out.println("totalRecordCount========"+totalRecordCount);
List<GoodsCategory> goodCategories = this.categoryDao.getAll();
System.out.println("list size======"+goodCategories.size());
TreeHelper treeHelper = new TreeHelper(goodCategories);
System.out.println("print tree");
//treeHelper.printRoot();
}
3 테스트 용례
3.1 트리 테스트 및 구성
public class TreeHelper {
TreeData root = new TreeData();
protected final transient Logger log = LoggerFactory.getLogger(getClass());
public TreeHelper(List goodCategories) {
buildTree(goodCategories);
}
public TreeData getRoot() {
return root;
}
private void buildTree(List goodCategories) {
root.setCodes("0");
root.setName("Root");
TreeData td_pre = root;
int codelenth_pre = 0;
String code_pre="";
for (GoodsCategory goodsCategory : goodCategories) {
String code = goodsCategory.getCode();
int codelenth_current = code.length();
TreeData td_current = new TreeData();
td_current.setCodes(code);
td_current.setName(goodsCategory.getName());
log.info("codelenth_last="+codelenth_pre+" codelenth_current="+codelenth_current);
log.info("code_pre="+code_pre+" code_current="+code);
// create new child
if (codelenth_pre < codelenth_current) {
td_pre.addChild(td_current);
td_current.setParent(td_pre);
td_pre = td_current;
code_pre = code;
}
// add child to parent
else if (codelenth_pre == codelenth_current) {
td_pre.getParent().addChild(td_current);
td_current.setParent(td_pre.getParent());
}
// add child continue
else {
int dilevel = (int) Math.ceil(new Double(codelenth_pre - codelenth_current)/ 3);
log.info("dilevel="+dilevel);
for (int i = 0; i < dilevel; i++) {
td_pre = td_pre.getParent();
log.info("td_pre code="+td_pre.getCodes());
}
code_pre = td_pre.getCodes();
td_pre.getParent().addChild(td_current);
td_current.setParent(td_pre.getParent());
td_pre = td_current;
}
codelenth_pre = codelenth_current;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
IE 메모리 유출 및 회수불가 연구 소결(지속 증가 중)
1. 메모리 유출
전에 많은 자료를 봤지만 이 형님의 말은 화룡점정이라고 할 수 있습니다.
IE의 메모리 유출 원인은 순환 인용인데 IE의 쓰레기 수거기가 이런 인용을 잘 처리하지 못한다.
유출된 순환 인용이 발생하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
private int totalLevel = 5;
private int brotherCount=10;
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
@Rollback(false)
public void testSave() {
insertTestData(brotherCount);
}
private void insertTestData(int brotherCount) {
insertFirstLayer(brotherCount);
for (int i = 0; i < brotherCount; i++)
insertOtherLayer(10 + i, brotherCount, 2);
}
private void insertFirstLayer(int brothersCount) {
for (int i = 0; i < brothersCount; i++) {
GoodsCategory first = new GoodsCategory();
first.setName("The first layer" + i);
first.setCode(String.valueOf(10 + i));
first.setParentCode(String.valueOf(0));
this.categoryDao.save(first);
}
}
private void insertOtherLayer(long parent_code, int brothersCount, final int currentLevel) {
int currentLevel_tmp = currentLevel;
if (currentLevel > totalLevel)
return;
logger.debug("parent_code==" + parent_code);
for (int k = 0; k < brothersCount; k++) {
GoodsCategory otherlayer = new GoodsCategory();
long code_tmp = 100;
String current_code = String.valueOf(parent_code) + String.valueOf(code_tmp + k);
otherlayer.setName("The " + currentLevel_tmp + " layer");
otherlayer.setCode(current_code);
otherlayer.setParentCode(String.valueOf(parent_code));
this.categoryDao.save(otherlayer);
insertOtherLayer(Long.parseLong(current_code), brothersCount, currentLevel_tmp + 1);
}
}
@Test
public void testGetAllCategorys() {
// fail("Not yet implemented");
long totalRecordCount=0;
for (int i = 1; i < totalLevel+1; i++) {
totalRecordCount+=Math.pow(brotherCount, i);
}
System.out.println("totalRecordCount========"+totalRecordCount);
List<GoodsCategory> goodCategories = this.categoryDao.getAll();
System.out.println("list size======"+goodCategories.size());
TreeHelper treeHelper = new TreeHelper(goodCategories);
System.out.println("print tree");
//treeHelper.printRoot();
}
buildTree(goodCategories);
}
public TreeData getRoot() {
return root;
}
private void buildTree(List
root.setCodes("0");
root.setName("Root");
TreeData td_pre = root;
int codelenth_pre = 0;
String code_pre="";
for (GoodsCategory goodsCategory : goodCategories) {
String code = goodsCategory.getCode();
int codelenth_current = code.length();
TreeData td_current = new TreeData();
td_current.setCodes(code);
td_current.setName(goodsCategory.getName());
log.info("codelenth_last="+codelenth_pre+" codelenth_current="+codelenth_current);
log.info("code_pre="+code_pre+" code_current="+code);
// create new child
if (codelenth_pre < codelenth_current) {
td_pre.addChild(td_current);
td_current.setParent(td_pre);
td_pre = td_current;
code_pre = code;
}
// add child to parent
else if (codelenth_pre == codelenth_current) {
td_pre.getParent().addChild(td_current);
td_current.setParent(td_pre.getParent());
}
// add child continue
else {
int dilevel = (int) Math.ceil(new Double(codelenth_pre - codelenth_current)/ 3);
log.info("dilevel="+dilevel);
for (int i = 0; i < dilevel; i++) {
td_pre = td_pre.getParent();
log.info("td_pre code="+td_pre.getCodes());
}
code_pre = td_pre.getCodes();
td_pre.getParent().addChild(td_current);
td_current.setParent(td_pre.getParent());
td_pre = td_current;
}
codelenth_pre = codelenth_current;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
IE 메모리 유출 및 회수불가 연구 소결(지속 증가 중)1. 메모리 유출 전에 많은 자료를 봤지만 이 형님의 말은 화룡점정이라고 할 수 있습니다. IE의 메모리 유출 원인은 순환 인용인데 IE의 쓰레기 수거기가 이런 인용을 잘 처리하지 못한다. 유출된 순환 인용이 발생하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.