2010-07-12 4 views

답변

10

테이블에 부울 속성을 갖는 대신 하나의 행을 포함하고 원래 테이블의 행을 가리키는 다른 테이블을 가질 수 있습니다.

True 값을 변경하면 TrueRow 테이블에서 외래 키를 업데이트해야합니다.

+0

예. 그리고 check 제약 조건을 사용하여 하나의 행만 존재하도록 할 수 있습니다 (Celko의 기술 http://www.sqlmonster.com/Uwe/Forum을 사용하십시오).aspx/ms-sql-server/3453/How-to-Modify-a-views-SQL-source-from-a-program) –

+0

정확하게 내 의견에 쓴 내용 - 그러나 우리는 재 설계가 가능한지 모르겠습니다. SQL 스키마. 문제는 확실히 디자인에 의한 문제입니다. 어쨌든 이것은 이미 논의되었습니다 ... – Erik

+0

Thanks Gilbert & Erik. 스키마 변경이 가능하므로이 접근 방식을 사용합니다. – Reddy

1
  1. 특정 열에는 'true'또는 'false'값만 사용할 수 있습니다. 열 중 하나 boolean 또는 tiny-int

2

를 사용하여 데이터 유형과 정확히 하나의 행은 '진정한'값을 갖는해야 하는가?

당신은 당신을 "부울"컬럼의 데이터 유형을 설정 사실

+0

(이것은 정말 인덱스가 생각에 사용되는 의미하는 것이 아니다) (2), 나는 그것이 제약처럼 (독특한, 기본 키 제약 조건과 유사)가되고 싶어요 – Reddy

1

로 설정 제외한 갱신 false로 모든 행 열을 쿼리를 작성해야; 업데이트 할 때 항상 "true"가 될 행을 true로 설정하는 trigger-function을 추가하십시오.

+0

감사의 말은 좋은 옵션이지만 다른 옵션은 없습니까? – Reddy

+0

나는 그렇게 생각하지 않는다. 업데이트를 방지하기 위해 단일 행에 열 잠금을 설정할 수 없습니다. 어떤 종류의 UNIQUE 인덱스도 작동하지 않을 것이다. 다른 모든 거짓 엔트리는 중복 키 - 예외를 던질 것이기 때문이다. 테이블을 변경하기 위해 저장 프로 시저 또는 뷰를 사용하는 경우에만이를 적용 할 수 있습니다. 테이블을 직접 사용하는 경우 트리거가 유일한 옵션이라고 생각합니다. 또 다른 해결 방법은 열을 다른 테이블로 추출하여이 테이블에 조인하는 것입니다. 그러나 나는 이것을 확인할 수 없다. 나는 네가 정확히 무엇을하고 있는지 모른다. – Erik

2

MySQL에서 고유 인덱스는 NULL 값을 무시합니다. 그래서 당신이 사용할 수있는 약간의 해킹이 있습니다.

당신은 (값만 1 또는 0 가질 수) 널 (NULL) bit 열을 추가하는 것을 고려 할 수

:

이 시점에서
ADD COLUMN `is_default` BIT NULL; 
ADD UNIQUE INDEX `is_default_UNIQUE` (`is_default` ASC); 

, 하나 개의 행이 될 수 1 (TRUE)을, 또 다른 행을 추가하려고 시도 즉도 마찬가지입니다, 오류가 발생합니다 :

1062: Duplicate entry '\x01' for key 'is_default_UNIQUE' 

유일한 캐치 다른 모든 행이 NULL해야하고 또한 고유 한 값으로 계산하는 것처럼 거짓되지 않을 수 있다는 것입니다.

Example table data

에 대한

관련 문제