2011-09-07 2 views
3

SQL Server에서 테이블을 만드는 것과 관련하여 작은 쿼리가 있습니다.SQL Server 테이블에 기본 열과 두 개의 하위 열이 있습니다.

테이블에 6 개의 열이 있습니다. 각 열에는 이름이 있습니다.

각 열에서이를 양수 및 음수라는 두 개의 열로 더 나누고 싶습니다.

따라서

  • 열 1은 (긍정적 | 음)
  • 열 2 (긍정적 | 음) ...

는 테이블 스키마 될 것이다.

나는 컬럼을 생성하고 그 컬럼에 이름을 연관시키는 것이 쉽다는 것을 이해한다. 그러나 테이블을 생성하는 동안 컬럼을 두 개로 나누고 서브 컬럼으로 이름을 붙일 수있는 방법을 알고있다.

+0

에 가입해야 데이터베이스의 첫 번째 정규 형식 : 모든 특성 (즉, 열)은 원자 적이며 단일 값만 포함하거나 전혀 값을 포함하지 않습니다. 열은 하나의 열이고, 데이터 유형을 가지고 있으며, 값을 가질 수 있습니다. 그러나 열을 "세분화"할 수는 없습니다 ... –

답변

5

Column1_PositiveColumn1_Negative이 서로 다른 두 속성 인 경우 해당 속성을 저장하기 위해 두 개의 개별 열이 필요합니다. 단일 열을 두 개의 요소로 세분 할 수 없습니다.

+1

+1 : Short; 12 개의 열을 만들고, 6을 각각 2로 나누지 말라. – MatBailie

3

조 스테파넬리 (Joe Stefanelli)의 답변에 따라 열을 세분 할 수 없습니다.

각 열을 구조체 또는 자체 클래스로 처리하려는 것처럼 느껴집니다. 구조체로 TABLE을 생각하고 각 FIELD를 프리미티브로 생각하는 것이 좋습니다.

가장 가까운 항목은 12 개의 열을 만들고 적절하게 이름을 지정하거나 (C1_Pos, C1_Neg, C2_Pos, C2_Neg 등) 두 개의 테이블을 만드는 것입니다.

하나의 테이블에는 기본 키 열이 있고 두 개의 값 열이 있습니다. positivenegative. 주 테이블의 각 항목은이 테이블을 참조합니다. 당신이 값 중 하나를 잡아 할 때마다 예를 들어

은 ...

다음
CREATE TABLE value_pair (
    id     INT, 
    positive   INT, 
    negative   INT, 
    PRIMARY KEY (id) 
); 

CREATE TABLE master (
    id     INT, 
    value_pair_id_1 INT, 
    value_pair_id_2 INT, 
    value_pair_id_3 INT, 
    value_pair_id_4 INT, 
    value_pair_id_5 INT, 
    value_pair_id_6 INT, 
    PRIMARY KEY (id), 
    FOREIGN KEY (value_pair_id_1) REFERENCES value_pair (id), 
    FOREIGN KEY (value_pair_id_2) REFERENCES value_pair (id), 
    FOREIGN KEY (value_pair_id_3) REFERENCES value_pair (id), 
    FOREIGN KEY (value_pair_id_4) REFERENCES value_pair (id), 
    FOREIGN KEY (value_pair_id_5) REFERENCES value_pair (id), 
    FOREIGN KEY (value_pair_id_6) REFERENCES value_pair (id) 
); 

, 그러나, 당신은 두 개의 테이블을 조인하도록 강요하고 있습니다. 당신이 모든 값을 원하는 경우, 당신은 이것은 위반 6 회 ...

SELECT 
    * 
FROM 
    master 
INNER JOIN 
    value_pair AS [VP1] 
    ON master.value_pair_id_1 = [VP1].id 
INNER JOIN 
    value_pair AS [VP2] 
    ON master.value_pair_id_2 = [VP1].id 
INNER JOIN 
    value_pair AS [VP3] 
    ON master.value_pair_id_3 = [VP1].id 
INNER JOIN 
    value_pair AS [VP4] 
    ON master.value_pair_id_4 = [VP1].id 
INNER JOIN 
    value_pair AS [VP5] 
    ON master.value_pair_id_5 = [VP1].id 
INNER JOIN 
    value_pair AS [VP6] 
    ON master.value_pair_id_6 = [VP1].id 
개인적으로


, 난 그냥 12 열을 사용하는 거라고 ...

관련 문제