2014-01-05 3 views
0

DB 디자인 및 성능에 대한 질문이 있습니다.SQL DB 디자인을위한 최상의 성능?

다음과 같은 시나리오를 상상해 : 나는 Product 테이블이

을, 제품의 각 레코드는 다른 색상, 다른 무게와 다른 유형이있을 수 있습니다. 내가 3 개 테이블을 디자인 할 수

  1. , ProductIDColor 열이있는 Productcolor 테이블, ProductIDProductSize에 대한 다음 하나, 체중 열 및 ProductType 테이블 : 내 데이터베이스를 설계 할 때 두 가지 방법이 있습니다 ProductIDType. 그리고 다른 색상, 와이트 및 유형으로 한 제품을 반복하십시오. join을 사용하여 전체 속성을 가질 수 있습니다.

  2. Product 테이블에 색상, 무게, 유형 열을 가질 수 있으며 ","와 같은 구분 기호로 다른 값을 구분할 수 있습니다.

나는이 같은 몇 가지 테이블을 가지고 있는데, 그런 시나리오에 대한 더 나은 해결책이 있는지 알고 싶습니까? 아니라면 하나는 SQL과 심지어 내 asp.net 프로젝트에서 더 나은 성능을 가지고?

+2

# 1은 거의 올바른 데이터베이스 정규화가 될 것입니다. # 2 접근법은 응용 프로그램의 수명이 다할 때 슬픔과 걱정과 생산성 저하를 초래하는 추한 해킹입니다. –

+1

많은 사람들이 말했듯이 .dot separated field, 고전적인 나쁜 아이디어는 SQL 쿼리에 하나 이상의 속성이있는 제품을 찾지 않으려는 경우가 아니면 절대 사용하지 않는 것이 좋습니다. 그것이 사실이라면, 어쨌든 NoSQ1 변종을 선택하는 것이 낫습니다. –

답변

0

예를 들어, 제품 id와 name에 대한 열과 color, weight 및 type에 대한 세 개의 개별 열이있는 단일 테이블을 갖게됩니다. 다른 요구 사항에 따라 색을 구분하고 별도의 테이블로 입력 할 수 있습니다.

두 번째 제안에서 색상 무게와 유형을 하나의 열에 넣는 것에 대해 이야기하고 있습니까? 아마도 "빨간색, 2kg, 위젯"과 같은 문자열을 포함하고 있을까요? 그렇다면 절대로하지 마십시오. 그것은 데이터베이스에 물건을 넣는 최악의 방법입니다.

+0

아니요, 두 번째 방법으로 각 속성을 분리 된 값으로 분리 된 3 개의 열을 의미했습니다. 예 : color column = red, blue, black. 가중치 열 = 120k, 130k ... –

0

이 예제를 시도하십시오!

는 지금

Product_Id | Product_Name 
1   | Product's first name 

같은 제품 테이블을 작성 다른 테이블을 사용하고 여기에 속성과 설정을 쓰기! 당신도 그들에게 (색상, 무게, 형태)를 저장하려면이 방법은

Product_Id | Product_Color | Product_Weight | Product_Type 
1   | Color of it | Its weight  | Type of it! 
이제

, 당신도 그들을 위해 별도의 테이블을 만들 수 있습니다! 이처럼 :

Color_Id | Color_Name 
1  | Red 
2  | Green 

지금,이 모든 후, 당신은 단지 Product_Properties에서 Color_Id을 절약 할 수 있습니다.

데이터베이스 디자인에는 더 나은 데이터베이스 디자인을 위해 따라야하는 몇 가지 속성과 규칙이 있습니다! 포함되는 내용은 다음과 같습니다.

  1. 각 유형의 데이터에는 자체 테이블이 있어야합니다!

  2. 데이터 (중복 데이터를 제거하거나 별도의 데이터 정체성 장소로 이동해야합니다) 복제 안

  3. 당신은 데이터에 대한 기본 키를 저장하고 그것을 사용하려고해야합니다!

이러한 사항을 염두에두면 데이터베이스의 더 나은 디자인을 만들 수 있습니다. 어느 쪽도 당신을 위해 쉬울 것입니다.

+0

이 속성은 서로 관련이 없으므로 각 하위 열에는 Productid 및 colorid와 같은 2 개의 열만있는 3 개의 하위 표가 있습니다. 또는 productid 및 유형 ... 잘? 이런 식으로 나는 너무 많은 테이블을 가질 것이다! –

+0

당신은 @maryammohammadi .. 원하는만큼 많은 테이블을 생성 할 수 있습니다. 그러나 그들 중 유일한 공통점은'Product_Id'입니다. 당신이 제품을 구별하여 각자 자신의 소유물을 갖게됩니다! :) –

관련 문제