데이터베이스에 성별 (성별) 저장
가능한 한 적은 (크기 / 성능) 비용으로 데이터베이스에 사용자의 성별을 저장하고 싶습니다.
지금까지 3 가지 시나리오가 떠 오릅니다.
- INT - 코드에서 열거 정렬 (1 = 남성, 여성 2 = 3 = ...)
- 숯 (1) - 스토어 m , F 또는 다른 단일 문자 식별자
- 비트 (부울) - 이 옵션에 적합한 필드 이름이 있습니까?
내가 묻는 이유는 문자 가 부울 보다 작다 는 언급 이 답변 때문입니다 .
나는 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
'IT박스' 카테고리의 다른 글
외래 키 및 이들이 참조하는 테이블 목록 (0) | 2020.07.04 |
---|---|
node.js http.Client에서 http 프록시를 사용하려면 어떻게해야합니까? (0) | 2020.07.04 |
ASP.NET에서 기본 페이지를 설정하는 방법은 무엇입니까? (0) | 2020.07.04 |
WinForms에서 레이블을 중앙에 유지하려면 어떻게합니까? (0) | 2020.07.04 |
자바 스크립트에서 범위 만들기-이상한 구문 (0) | 2020.07.04 |