2017-04-18 6 views
0

ID가 Col1이고 Col2, Col3 인 테이블 "테이블"이 있습니다. Col2는 0 또는 1 중 하나 일 수 있습니다.Col1이 동일한 값을 가진 행에서 Col2를 원합니다. 예는다른 열을 기반으로하는 열의 제약

나는 MySQL을 점검 제한 조건을 지원하는 경우에도이

+----+-------+------+-----------+ 
| ID | Col1 | Col2 | Col3 | 
+----+-------+------+-----------+ 
| 1 | "One" | 0 | "Yeah" | 
| 2 | "One" | 0 | "Meh"  | 
| 3 | "One" | 0 | "Why Not" | 
| 4 | "Two" | 1 | "Huh"! | 
+----+-------+------+-----------+ 

그리고하지

+----+-------+------+-----------+ 
| ID | Col1 | Col2 | Col3 | 
+----+-------+------+-----------+ 
| 1 | "One" | 0 | "Yeah" | 
| 2 | "One" | 0 | "Meh"  | 
| 3 | "One" | 1 | "Why Not" | (Normally it must be 0 or line 1 and 2 
| 4 | "Two" | 1 | "Huh"! | Must be "1") 
+----+-------+------+-----------+ 
+1

예상되는 출력을 살펴본 후에도 원하는 결과가 분명하지 않습니다. 하지만 다른 컬럼 값을 기반으로하는 col2를 원한다면 계산 된 값을 저장하는 것이 가장 좋습니다. 대신 데이터를 가져올 때 계산을 수행하는 것이 가장 좋습니다. –

+1

에 입력 테이블 데이터가 언급되어 있고 출력에 원하는 내용이 –

+0

일 수 있습니다. http://stackoverflow.com/questions/7522026/how-do-i-add-a-check-constratint-to-a-table? - 상태가 점검되어야 할 때 명확하지 않습니다 : 입력시 또는 업데이트 스크립트를 작성 하시겠습니까? – cypherabe

답변

0

같은, 당신은 check 제약이 작업을 수행 할 것이라고합니다. 가장 좋은 방법은 외래 키 제약 조건을 사용하는 것입니다.

당신은 유효한 col1/ col2 값으로 두 번째 테이블이 필요합니다
create table Col1Col2 as (
    col1 varchar(255) not null primary key, 
    col2 int not null, 
    unique (col1, col2) -- this is not strictly necessary see below 
); 

그런 다음 테이블은 다음과 같습니다

create table t as (
    id int auto_increment primary key, 
    col1 varchar(255) not null, 
    col2 int not null 
    col3 int, 
    constraint fk_t_col1_col2 foreign key (col1, col2) references col1col2(col1, col2) 
); 

그러나, 나는 심지어 tcol2를 저장하지 않을 것입니다. 대신 t에서 제거하고 col1col2의 값을 찾아보십시오.

기본 요구 사항은 데이터를 관계형 형식으로 저장하지 않는다는 것입니다.이 요구 사항은 사용자가 다른 항목을 가지고 있음을 암시하기 때문입니다.

+0

오라클을 사용한다면 어떻게됩니까? – Elmehdi93

+0

@ Elmehdi93. . . 거의 똑같은 일. 데이터를 저장하는 적절한 방법은 수행중인 데이터베이스와 밀접한 관련이 없습니다 (차이점이 있지만 대개 엔티티의 정의에는 포함되지 않음). –