[SQL] 데이터베이스에 섹스 (성별) 저장
SQL데이터베이스에 섹스 (성별) 저장
나는 가능한 한 작은 (크기 / 성능) 비용으로 데이터베이스에 사용자의 성별을 저장할.
지금까지 3 개 시나리오 마음에 와서
내가 물어 이유는 문자가 논리 값보다 작은 것을 언급이 답변이다.
나는 비트 데이터 유형을 가지고 사실합니까 MS SQL 2008을 사용하고 있음을 명확히해야한다.
해결법
-
==============================
1.나는 "성"열을 호출 할 것입니다.
나는 "성"열을 호출 할 것입니다.
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
그것은 단지 불충분 두 가지 성별을 지원하기 때문에 BIT 데이터 유형은 배제 될 수있다. INT 지원하는 두 개 이상의 옵션이 있지만, 그것은 4 바이트 소요 - 성능이 작은 / 더 좁은 데이터 형식에 더 좋을 것이다.
CHAR (1) TINYINT 이상의 에지를 갖는다 -을 모두 동일한 수의 바이트를 가지고 있지만 CHAR 값보다 좁은를 제공한다. CHAR (1)를 사용하여 "m", "F", 등을 사용하여 만들 것이다 천연 키 대리 / 인공 키라고도 수치 데이터의 사용을 대. CHAR (1)도 데이터베이스에서 지원되는 포트에 대한 필요가 있어야한다.
CHAR (1) : 나는 옵션 2를 사용합니다.
낮은 카디널리티 열에 인덱스에 값이 없기 때문에 성별 컬럼에 인덱스 가능성이 도움이되지 것입니다. 의미, 어떤 가치를 제공 할 수있는 인덱스의 값에 충분한 여러 가지가 아니다.
-
==============================
2.이에 대한 ISO 표준은 이미 있습니다; 필요가 자신의 계획을 발명합니다 :
이에 대한 ISO 표준은 이미 있습니다; 필요가 자신의 계획을 발명합니다 :
http://en.wikipedia.org/wiki/ISO_5218
표준 당, 열은 "섹스"를 호출해야하고 '가장 가까운'데이터 형식은 적절한으로 CHECK 제약 조건 또는 조회 테이블 TINYINT 될 것이다.
-
==============================
3.남성, 여성, 불확정, 알려지지 않은 : 의학에서 네 남녀가있다. 당신은 네 가지가 필요하지 않을 수 있습니다하지만 당신은 확실히 1이 필요하고, 4.이 데이터 타입에 대한 기본 값을 갖도록 적절한 아니에요. 비록 적은 '이다'와 함께 부울로 치료하는 상태 '아니다'.
남성, 여성, 불확정, 알려지지 않은 : 의학에서 네 남녀가있다. 당신은 네 가지가 필요하지 않을 수 있습니다하지만 당신은 확실히 1이 필요하고, 4.이 데이터 타입에 대한 기본 값을 갖도록 적절한 아니에요. 비록 적은 '이다'와 함께 부울로 치료하는 상태 '아니다'.
-
==============================
4.열거 필드에 정렬하는 int (또는 TINYINT는) 내 방법이 될 것입니다.
열거 필드에 정렬하는 int (또는 TINYINT는) 내 방법이 될 것입니다.
당신은 데이터베이스의 단일 비트 필드가있는 경우 먼저, 행은 여전히 여러 비트 필드가있는 경우에만 갚는다, 공간 절약으로 지금까지, 전체 바이트를 사용합니다.
둘째, 문자열 / 문자에 관계없이 디자인 타임에 보일 수있는 방법 명백한의, 그들에게 "마법 값"느낌이있다. 하지 언급, 그것은 사람들이 단지 그들이 반드시 분명 아무것도에 매핑하지 않을 값에 대해 저장할 수 있습니다.
셋째, 수치 참조 무결성을 강화하기 위하여, 룩업 테이블을 작성하는 것이 훨씬 쉽다 (나은 연습)이고, 1 대 1 열거와 연관시킬 수 있으므로 메모리 값 내에 저장 패리티가 응용 프로그램이나 데이터베이스있다.
-
==============================
5.나는 이름, 음성 및 대화에서 성별을 추측하기 때문에 문자 'F', 'm'과 'U'를 사용하고, 때로는 성별을 알 수 없습니다. 최종 결정은 자신의 의견이다.
나는 이름, 음성 및 대화에서 성별을 추측하기 때문에 문자 'F', 'm'과 'U'를 사용하고, 때로는 성별을 알 수 없습니다. 최종 결정은 자신의 의견이다.
정말 당신이 그 사람을 알고 당신의 기준 여부를 물리적 형태 또는 개인의 정체성 얼마나 잘 따라 달라집니다. 여성에 대한 상호, 남성에 대한 상호, 여성 트랜스 남성에 트랜스, 자웅 동체 및 미정 - 심리학자는 추가 옵션이 필요할 수 있습니다. 명확하지 단일 문자로 정의 9 옵션으로, 나는 작은 정수의 휴고의 조언과 함께 갈 수 있습니다.
-
==============================
6.옵션 3은 당신의 최선의 방법이지만, 모든 DB 엔진은 "비트"유형이있다. 당신이 조금이없는 경우, TINYINT는 당신의 최선의 방법 일 것이다.
옵션 3은 당신의 최선의 방법이지만, 모든 DB 엔진은 "비트"유형이있다. 당신이 조금이없는 경우, TINYINT는 당신의 최선의 방법 일 것이다.
-
==============================
7.내가 옵션 3 대신 하나의 여러 NON NULLABLE 비트 열이 갈 것입니다. IsMale (1 = 예 / 0 = 없음) IsFemale (1 = 예 / 0 = 없음)
내가 옵션 3 대신 하나의 여러 NON NULLABLE 비트 열이 갈 것입니다. IsMale (1 = 예 / 0 = 없음) IsFemale (1 = 예 / 0 = 없음)
필요한 경우 : 인가 알 수없는 성별 (1 = / 0 = 아니오) 등등...
정의를 쉽게 읽기 쉬운 확장 성, 쉬운 programability위한이 차종은 도메인 외부 값을 사용의 가능성 및 FK 또는 CHECK 제약 + 두 번째 룩업 테이블의 요구 사항은 값을 잠글 수 없습니다.
-
==============================
8.
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;
여기 링크 설명을 입력
from https://stackoverflow.com/questions/4175878/storing-sex-gender-in-database by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 사실, 그렇지 않은 경우 MySQL의 1050 오류 "테이블이 이미 존재합니다" (0) | 2020.04.13 |
---|---|
[SQL] () 일일 지금 MYSQL (0) | 2020.04.13 |
[SQL] MySQL의에서 관계를 만드는 방법 (0) | 2020.04.13 |
[SQL] 어떻게 NHibernate에 단지 그것을 실행하지 않고 SQL을 생성 할 수 있습니다? (0) | 2020.04.13 |
[SQL] 어떻게 먼저 특정 값으로 행을 반환합니까? (0) | 2020.04.13 |