programing

Oracle의 부울 필드

cafebook 2023. 3. 4. 15:11
반응형

Oracle의 부울 필드

어제 Oracle 테이블에 부울 필드를 추가하려고 했습니다.그러나 Oracle에는 실제로 부울 데이터 유형이 없습니다.여기 부울 시뮬레이션을 하는 가장 좋은 방법을 아는 사람 있나요?그 주제를 검색해 보니 몇 가지 접근법이 발견되었다.

  1. 정수를 사용하여 0 또는 1 이외의 값을 할당할 필요가 없습니다.

  2. 'Y' 또는 'N'이 있는 char 필드를 두 개의 값으로만 사용하십시오.

  3. CHECK 제약 조건이 있는 열거형을 사용합니다.

경험이 풍부한 Oracle 개발자는 어떤 접근 방식이 선호되는지 알고 있습니까?

나는 이 링크가 유용하다고 생각했다.

다음은 각 접근법의 장단점을 강조하는 단락입니다.

가장 일반적으로 볼 수 있는 설계는 Oracle의 데이터 사전 보기에서 사용하는 많은 부울형 플래그를 모방하여 참이면 'Y'를, 거짓이면 'N'을 선택하는 것입니다.그러나 JDBC, OCCI 및 기타 프로그래밍 환경과 올바르게 상호 작용하려면 getBoolean 및 setBoolean 함수에서 올바르게 작동할 수 있도록 false에 0, true에 1을 선택하는 것이 좋습니다.

기본적으로 그들은 효율성을 위해 방법 2를 지지한다.

  • 0/1(JDBC와의 상호 운용성 때문에)getBoolean() 제약이 경우 등체크 제약이 있는 경우
  • (NUMBER보다 공간을 적게 사용하기 때문에) CHAR의 한 종류입니다.

예를 들어 다음과 같습니다.

create table tbool (bool char check (bool in (0,1));
insert into tbool values(0);
insert into tbool values(1);`

Oracle 자체에서 부울 값에 Y/N을 사용합니다.완전성을 위해 pl/sql은 부울 타입을 가지지만 그렇지 않은 것은 테이블뿐이라는 점에 유의해야 합니다.

이 필드를 사용하여 레코드를 처리할 필요가 있는지 여부를 나타내는 경우 Y 및 NULL을 값으로 사용하는 것을 고려할 수 있습니다.따라서 공간을 거의 사용하지 않는 매우 작은(빠른 읽기) 인덱스가 만들어집니다.

최소 공간을 사용하려면 'Y' 또는 'N'으로 제한된 CHAR 필드를 사용해야 합니다.Oracle은 BOUAL, BIT 또는 TINYINT 데이터 유형을 지원하지 않으므로 CHAR의 1바이트는 최대한 작습니다.

NOT NULL과 체크 제약 조건을 사용하여 내용을 이러한 값으로 제한하는 경우 0과 1을 사용하는 것이 가장 좋습니다(숫자로는 0과 1을 공간 효율을 위해 CHAR로 제안하지만 나에게는 너무 비틀립니다).(컬럼을 null로 만들어야 하는 경우 취급하는 것은 부울이 아니라 3개의 값을 가진 열거형입니다.)

0/1의 장점:

  • 언어에 구애받지 않는다.'Y'랑 'N'은 다 쓰면 될 것 같아요.하지만 그들은 그렇지 않다.프랑스에서는 'O'와 'N'을 사용한다.나는 핀란드에서 그들이 거기서 E와 K를 사용하는지 보기 위해 프로그램을 짜지 않았다. 의심할 여지 없이 그들은 그것보다 똑똑하지만, 당신은 확신할 수 없다.
  • 널리 사용되는 프로그래밍 언어(C, C++, Perl, Javascript) 연습과 일치합니다.
  • 어플리케이션 레이어(예:휴지 상태
  • 몇 를 먹을 수 위해 로 이어집니다.select sum(is_ripe) from bananasselect count(*) from bananas where is_ripe = 'Y' 심지어 ( or비비 ( ((비록)select sum(case is_ripe when 'Y' then 1 else 0) from bananas

'Y'/'N'의 장점:

  • 0/1보다 적은 공간을 차지합니다.
  • Oracle이 제안하는 바입니다.따라서 더 익숙한 사람도 있을 수 있습니다.

또 다른 포스터는 성능 향상을 위해 'Y'/null'을 제안했습니다.퍼포먼스가 필요한 것을 실증하고 있는 경우는, 충분히 타당하지만, 그렇지 않은 경우는, 문의가 자연스럽지 않기 때문에 회피합니다(some_column is nullsome_column = 0왼쪽 조인에서는 존재하지 않는 레코드와 거짓을 혼동합니다.

체크 제약이 있는 1/0 또는 Y/N 중 하나.ether way 괜찮아요.perl에서 많은 작업을 하기 때문에 개인적으로 1/0을 선호하며, 데이터베이스 필드에서 perl Boolean 연산을 매우 쉽게 수행할 수 있습니다.

오라클스 헤드 혼코 중 한 명과 이 질문에 대해 정말 심도 있는 논의를 원하신다면, 톰 키테가 이 질문에 대해 말하는 것을 확인해 보세요.여기서

내가 작업한 대부분의 데이터베이스는 Y/N을 부울런으로 사용했다.이 구현을 통해 다음과 같은 기술을 수행할 수 있습니다.

  1. 수:
    X의 합계에서 SUM = '1 0합니다.FLAG = 'Y' 이 1 EXE 0).

  2. 행을 그룹화할 때 "한 행이 참이면 모두 참" 논리를 적용합니다.
    YY에서 MAX(BOOLAN_FLAG를 선택합니다.
    거짓.

하여 승인된 하는 작업 "Boolean" 사용).number 명령어):

ALTER TABLE my_table_name ADD (
my_new_boolean_column number(1) DEFAULT 0 NOT NULL
CONSTRAINT my_new_boolean_column CHECK (my_new_boolean_column in (1,0))
);

새 .my_table_name라고 하는my_new_boolean_column0으로 하다 열에는 이열 the the the the 。NULL하고 허용 을 '하다'로 합니다.0 ★★★★★★★★★★★★★★★★★」1.

데이터베이스에서는 TRUE 또는 FALSE 중 하나를 전달하는 열거형을 사용합니다.처음 두 가지 방법 중 하나를 사용하면 적절한 설계를 거치지 않고 정수에 새로운 의미를 추가하거나 Y, Y, N, n, T, t, F, f 값을 가진 문자 필드로 끝나거나 코드 섹션이 어떤 테이블을 사용하고 있고 어떤 버전의 true를 사용하고 있는지 기억해야 합니다.

언급URL : https://stackoverflow.com/questions/30062/boolean-field-in-oracle

반응형