2013-06-20 5 views
4

MY SQL 데이터베이스에 성을 저장하는 가장 좋은 방법은 무엇입니까? 다른 사람들이 다른 방식으로 표현하기 때문에 나는이 문제에 대해 다소 혼란스러워합니다. 일부는 INT 더에 저장 제안하지만, 다른 하나는 열거TINYINT을 제안한다, 그러나 일부 다른 여성 (1) M 남성을위한F 숯불에 저장 제안합니다. 이 ENUM보다 견고성을 제공하기 때문에, CHAR에 좋은 생각을한다 저장하지만 내 관점에서성별을 MySQL 데이터베이스에 저장하는 가장 좋은 기술

http://en.wikipedia.org/wiki/ISO_5218을 들으면서

은 또한 그것은 더 의심 얻는다? 또한 나는, 확장성에 대한 우려 오전을 알고 싶어요 수백만 개의 레코드를 저장하는 더 나은 솔루션입니다.

전문가의 소중한 의견을 높이 평가합니다.

+0

엄선 된 태그 지정. –

+0

좀 더 구체적으로 알려주세요. – t0m

+1

많은 태그가 질문과 관련이 없음을 의미합니다. 정말로 뛰어 내리는 두 가지는'mysqli' 또는'mysqldump'입니다. 여러분의 질문은 그들과 관련이 없습니다. –

답변

4

개인적으로 (다소 주관적인 질문이기 때문에) 나는 ENUM으로 갈 것입니다. MySQL은 CHECK 제약 조건을 지원하지 않으므로, 은 값이 M 또는 F (또는 m 또는 f)인지 실제로 확인할 수있는 유일한 방법입니다. 제게 그것은 가장 중요한 포인트입니다. 이 CHAR(1) 또는 TINYINT만큼 효율적인 스토리지 와이즈 그래서

또한 ENUM 만합니다 (docs)에 따라 저장 공간의 하나의 바이트를 필요로한다.

SELECT * FROM myTable WHERE gender = 1; 

1 남성 또는 여성인가 :이 같은 쿼리와 끝까지 때문에

나는 전혀 TINYINT 접근 방식을 이해하지? 그리고 그것이 남성이라면, 여성 0일까요? 아니면 2입니까? 아니면 16일까요? 응용 프로그램을 작성 (및 유지 관리)하기 위해 이미 많은 것을 기억해야합니다. 그 더미에 추가 할 필요가 없습니다.


부록 2017년 12월 1일 에드 깁스 : 나는 관련이없는 Google 검색에 걸쳐 발견 할 때 내 대답을 다시 방문 ...

ENUM 접근 방식은 정적와 함께 사용할 경우에 장점이있다 , 값의 단일 차원 도메인 (예 : Y/N, To/Cc/Bcc)은 성별에 맞지 않습니다. 제 대답은 "성 (column)을 M 또는 F로 어떻게 제한합니까?"와 같은 성격의 컨텍스트에서 였고 성 정의에 대한 더 넓은 맥락에서가 아니 었습니다.

D Mac의 솔루션은보다 견고하고 계몽 적이지만 성별이 다차원 인 반면 1 차원이기 때문에 여전히 불완전합니다.

인간을 주관적인 범주 (성별, 인종, 계급 신분, 종교, 정치적 취향, 고용 상태, 민족 정체성, 성적 취향, 우울함 등)로 분류 할 때, 자신을 식별 할 수있는 여러 가지 방법을 고려하십시오 . 항상 "단일 상자 확인"솔루션이있는 것은 아닙니다.

이것은 이념을 뛰어 넘습니다. 다차원 개체를 단일 차원으로 분류하려고 시도하는 것은 정확하지 않으며 부정확성은 비용이 듭니다.혹시 더 복잡한 성 문제를 처리해야 할 수도

+0

@ 고마워요 ... Ed 일부는 열거 형보다 100 만 레코드 숯을 사용하는 것이 더 낫다고 제안합니까? – t0m

+0

나는 그들이 틀렸다는 것을 알고있다. 주관적이야. 저에게있어 가장 중요한 문제는 'ENUM'은 유효하지 않은 값을 허용하지 않으므로 모든 백만 행의 값을 신뢰할 수 있다는 것입니다. MySQL에서 다른 방법을 사용하려면 유효한 값의 마스터 테이블에 대한 외래 키 참조가있는 char (또는 무엇이든) 열이 필요합니다. 이 특정한 경우, 데이터 세트가 너무 작고 (아마도 M과 F, 알려지지 않은 경우 NULL 일 수도 있음) 정적 (다른 성별에 대한 지원을 추가하기 위해 테이블을 수정할 필요가 없으며 정치적/이데올로기 적 질문을 제외하고) ENUM is isn 그다지 나쁘지 않아. –

+0

Laravel에서 마이그레이션을 롤백 할 때'enum' 유형이 다음과 같은 오류를 발생시킵니다.'Doctrine \ DBAL \ DBALException] 알 수없는 데이터베이스 유형 enum이 필요합니다. Doctrine \ DBAL \ Platforms \ MySQL57Platform이 지원하지 않을 수 있습니다. – Pathros

8

가 (에 프로세스 성별 변경이나 트랜스 젠더), 가장 좋은 방법은 가능한 값의 참조 테이블 사용하는 것입니다 : 처음

CREATE TABLE static_gender (
    ID INT AUTO_INCREMENT PRIMARY KEY, 
    Name varchar(10), 
    Description varchar(100) 
) ENGINE=INNODB; 

을, 다음과 같이로드 할 수 있습니다.

INSERT INTO static_gender VALUES 
(DEFAULT, 'F', 'female'), 
(DEFAULT, 'M', 'male'); 

성별에 대한 새로운 값이 필요할 때 테이블을 확장 할 수 있습니다. USER (또는 무엇이든) 테이블에서 static_gender_id을 저장하고 JOIN을 사용하여 성별에 대한 값을 가져옵니다.

관련 문제