2017-03-17 1 views
1

각 프로젝트는 ~ 30 개의 항목으로 구성된 10 개의 테이블을 가지고 있으며 값을 나열합니다. 시나리오 1과 시나리오 2의 장단점은 무엇입니까?SQL Server의 개별 열거 형 테이블과 범주 열이있는 테이블의 장단점은 무엇입니까?

열거 테이블의 양/테이블 당 행의 양을 기준으로 이러한 (단점) 이점에 대한 전환점이 있습니까?

시나리오 1 :

표 1

ID Value 
--------- 
1 - Value1 
2 - Value2 
3 - Value3 

표 2 :

ID Value 
--------- 
1 - Value4 
2 - Value5 
3 - Value6 

시나리오 2 :

,745,

표 :

ID Value Category 
--------------------- 
1 - Value1 - 1 
2 - Value2 - 1 
3 - Value3 - 1 
4 - Value4 - 2 
5 - Value5 - 2 
6 - Value6 - 2 
+0

이 테이블에 보관되는 데이터의 용도는 무엇입니까? 특정 값 유형에 추가 열이 필요할 가능성은 얼마나됩니까? – iamdave

+0

대부분 미리 정의 된 텍스트 특성 (예 : 필터링에 사용할 수있는 레이블)으로 사용되며 다른 테이블에서 외래 키로 참조됩니다. –

+2

[5 가지 간단한 데이터베이스 설계 오류 예방] (https : // www.simple-talk.com/sql/database-administration/five-simple--database-design-errors-you-should-avoid/) - 포인트 1은 "일반적인 룩업 테이블"입니다. # 2 - 이것을 피하십시오 ! –

답변

4

내가 옵션을 하나 갈 것입니다.

주된 이유는 첫 번째 옵션을 사용하면 특정 외래 키 제약 조건을 사용할 수 있기 때문에 주 테이블의 모든 특성이 관련 테이블에만 연결될 수 있다는 것을 의미하며 두 번째 옵션은 동일한 특성을 사용합니다. 옵션을 사용하면 검사 제약 조건을 사용해야하므로 더 복잡한 데이터베이스 스키마를 만들게됩니다.

두 번째 이유는 데이터베이스 테이블이 비즈니스 엔티티를 반영해야한다는 것이고 첫 번째 옵션을 사용하면 더 정확하게 할 수 있습니다.

세 번째 이유는 각 "열거 형"에 대해 가장 정확한 데이터 형식으로 "열거 형"을 저장할 수 있다는 것입니다.

좀 더 자세한 예를 들어 보겠습니다. 데이터베이스가 셔츠를 판매하기위한 것으로 가정 해 보겠습니다. 셔츠는 예를 들어 색상이나 크기와 같은 세부 정보를 확인할 수 있습니다.

Create table Shirts 
(
    Id int, 
    Model_Id int, 
    Color_Id int, 
    Size_Id int 
) 

Create table Models 
(
    Id int, 
    Name varchar(50) 
) 

Create table Colors 
(
    Id int, 
    Name varchar(20) 
) 

Create table Sizes 
(
    Id int, 
    Name varchar(5) 
) 

이 두 번째이로 번역 것 :

Create table Shirts 
(
    Id int, 
    Model_Id int, 
    Color_Id int, 
    Size_Id int 
) 

Create table Enums 
(
    Id int, 
    Name varchar(50), 
    Categoery_Id int 
) 

Create table Categories 
(
    Id int, 
    Name --(Model, Color, Size etc`) 
) 

이제 누군가가 열거 테이블의 특정 레코드에 대한 CATEGORY_ID을 변경 말할

첫 번째 옵션은이 같은 것으로 해석 할 - 귀하의 데이터는 더 이상 정확하지 않습니다. 이는 첫 번째 옵션으로는 발생할 수 없습니다.

+0

체크 제약에 대한 좋은 점은 좀 더 성 가시고, 나는 아직 고려하지 않았다. 실적에 중대한 영향이 있는지 어떻게 알 수 있습니까? –

+1

성능에 눈에 띄는 영향은 없어야하지만 데이터베이스가 실행되는 한 데이터 무결성은 매번 성능보다 우선합니다. –

관련 문제