IT박스

데이터베이스에 성별 (성별) 저장

itboxs 2020. 7. 4. 11:19
반응형

데이터베이스에 성별 (성별) 저장


가능한 한 적은 (크기 / 성능) 비용으로 데이터베이스에 사용자의 성별을 저장하고 싶습니다.

지금까지 3 가지 시나리오가 떠 오릅니다.

  1. INT - 코드에서 열거 정렬 (1 = 남성, 여성 2 = 3 = ...)
  2. 숯 (1) - 스토어 m , F 또는 다른 단일 문자 식별자
  3. 비트 (부울) - 이 옵션에 적합한 필드 이름이 있습니까?

내가 묻는 이유는 문자부울 보다 작다 는 언급 답변 때문입니다 .

나는 MS SQL 2008, 사용하고 있음을 명확히해야 합니까 비트 데이터 유형을 가지고 사실을.


열을 "성별"이라고합니다.

Data Type   Bytes Taken          Number/Range of Values
------------------------------------------------
TinyINT     1                    255 (zero to 255)
INT         4            -       2,147,483,648 to 2,147,483,647
BIT         1 (2 if 9+ columns)  2 (0 and 1)
CHAR(1)     1                    26 if case insensitive, 52 otherwise

비트 가 불충분하다 두 가지 성별을 지원하기 때문에 데이터 형식은 배제 될 수있다. INT 는 3 개 이상의 옵션을 지원 하지만 4 바이트가 필요합니다. 더 작거나 좁은 데이터 형식으로 성능이 향상됩니다.

CHAR(1)TinyINT 보다 우위에 있음 -둘 다 동일한 바이트 수를 사용하지만 CHAR은 더 좁은 수의 값을 제공합니다. 사용 CHAR(1)대리 / 인공 키라고도 수치 데이터의 사용을 대, "m", "F"등 천연 키를 사용하여 확인한다. CHAR(1)포팅이 필요한 경우 모든 데이터베이스에서 지원됩니다.

결론

옵션 2 : CHAR (1)을 사용합니다.

추가

카디널리티가 낮은 열의 인덱스에 값 없으므로 성별 열의 인덱스가 도움 되지 않을 수 있습니다. 즉, 인덱스 값이 다양하지 않아 값을 제공 할 수 없습니다.


이미 ISO 표준이 있습니다. 자신의 계획을 만들 필요가 없습니다.

http://en.wikipedia.org/wiki/ISO_5218

표준에 따라 열의 이름은 "Sex"여야하며 '가장 가까운'데이터 유형은 CHECK 제약 조건 또는 조회 테이블을 사용하여 가장 작습니다.


의학에는 남성, 여성, 불확실, 미지의 4 가지 성별이 있습니다. 4 개가 모두 필요하지는 않지만 확실히 1, 2 및 4가 필요합니다.이 데이터 유형의 기본값을 갖는 것은 적절하지 않습니다. 'is'및 'is n't'상태의 부울로 취급하는 것이 훨씬 적습니다.


Int(또는 TinyInt정렬) Enum필드 내 방법이 될 것입니다.

첫째, bit데이터베이스에 단일 필드가있는 경우 행은 여전히 ​​전체 바이트를 사용하므로 공간이 절약되는 한 여러 bit필드 가있는 경우에만 지불됩니다 .

둘째, 문자열 / 문자는 디자인 타임에 눈에 띄는 것과 상관없이 "마법의 가치"느낌을줍니다. 말할 것도없이, 사람들은 반드시 명백한 것에 매핑 할 필요가없는 거의 모든 가치를 저장할 수 있습니다.

셋째, 숫자 값은 참조 무결성을 강화하기 위해 조회 테이블을 작성하는 것이 훨씬 더 쉽고 더 나은 방법이며, 일대일을 열거 형과 상관시킬 수 있으므로 값을 메모리에 저장하는 데 패리티가 있습니다. 응용 프로그램 또는 데이터베이스에서.


나는 이름, 음성 및 대화에서 성별을 추측하고 때로는 성별을 알지 못하기 때문에 char 'f', 'm'및 'u'를 사용합니다. 최종 결정은 그들의 의견입니다.

그것은 당신이 그 사람을 얼마나 잘 알고 있는지 그리고 당신의 기준이 신체적 형태인지 개인적 정체성인지에 달려 있습니다. 심리학자는 여성 간, 남성 간, 여성 간, 남성 간, 자웅 동체 및 미정의 추가 옵션이 필요할 수 있습니다. 단일 문자로 명확하게 정의되지 않은 9 가지 옵션을 사용하면 Hugo의 작은 정수에 대한 조언을 사용할 수 있습니다.


옵션 3이 가장 좋은 방법이지만 모든 DB 엔진에 "비트"유형이있는 것은 아닙니다. 비트가 없다면 TinyINT가 최선의 방법입니다.


옵션 3을 사용하지만 하나 대신 여러 개의 NON NULLABLE 비트 열을 사용합니다. IsMale (1 = 예 / 0 = 아니오) IsFemale (1 = 예 / 0 = 아니오)

필요한 경우 : IsUnknownGender (1 = 예 / 0 = 아니오) 등 ...

따라서 정의를 쉽게 읽을 수 있고, 확장 성, 프로그래밍이 쉬우 며, 도메인 외부의 값을 사용할 가능성이 없으며 값을 잠그기 위해 두 번째 조회 테이블 + FK 또는 CHECK 제약 조건이 필요하지 않습니다.


CREATE TABLE Admission (
    Rno INT PRIMARY KEY AUTO_INCREMENT,
    Name VARCHAR(25) NOT NULL,
    Gender ENUM('M','F'),
    Boolean_Valu boolean,
    Dob Date,
    Fees numeric(7,2) NOT NULL
);




insert into Admission (Name,Gender,Boolean_Valu,Dob,Fees)values('Raj','M',true,'1990-07-12',50000);
insert into Admission (Name,Gender,Boolean_Valu,Dob,Fees)values('Rani','F',false,'1994-05-10',15000);
select * from admission;

여기에 링크 설명을 입력하십시오

참고 URL : https://stackoverflow.com/questions/4175878/storing-sex-gender-in-database

반응형