2017-10-09 10 views
1

프로젝트에 많은 마스터 데이터 (예 : 상태, 로캘, 기기 등)가 있습니다. 마스터 데이터를 저장하려면 다음 옵션을 참조하십시오.Google 클라우드에서 마스터 데이터를 관리하는 가장 좋은 방법은 sql (mysql) db 테이블 대 enum 열

  1. mysql에서 열거 형 열을 사용하십시오. 문제는 새 항목이 추가 될 때마다 테이블을 변경해야한다는 것입니다. 열거 형의 값 목록을 가져 오는 것은 간단하지 않습니다.
  2. 각 마스터 데이터에 대한 테이블을 만들고 외부 키 참조를 유지 관리합니다.
  3. 그냥 mysql 테이블에 문자열로 저장하십시오. 마스터 데이터를 코드의 열거 형으로 관리하거나 심지어 손쉽게 조작 할 수 있도록 Cloud Datastore에 저장합니다.

가장 좋은 방법은 무엇입니까? 다른 좋은 옵션이 있으면 제안하십시오. 열거의 장점 (및 단점) 논의

답변

0

OK ...

ENUM

  • 열거 1 바이트 소요 (2이> 255 개 가지 값을 가지고있는 경우).
  • CREATE TABLE을 사용할 때 가능한 모든 값을 지정해야합니다.
  • 나중에 ALTER TABLE을 사용하여 ENUM에 새 값을 추가 할 수 있습니다. (최신 버전의 MySQL에서) 실행하면 " 목록의 새 옵션 만 추가하면"저렴합니다.
  • 모든 데이터 유형과 마찬가지로 ENUM 열은 NULL 또는 NOT NULL 일 수 있습니다. NULLable으로 설정하면 정보를 보유하기 위해 추가 비트가 필요합니다 (다른 위치). 그리고 앱에서 'NULL'이 의미하는 바가 무엇인지 생각해야합니다. 대신 NOT NULL을 사용하고 첫 번째 옵션을 NULL이 무엇을 의미하든간에 사용하는 것이 좋습니다.
  • ENUM을 색인화 한 경우에도 여전히 사용하지 못할 수 있습니다. WHERE my_enum = 'something'은 'something'이 10-30 % 미만의 행에서 발생하지 않는 한 my_enum에서 색인을 사용하지 않을 것입니다. (정확하지 않은 숫자는 입니다. 옵티마이 저는 자체적으로 마음을 먹을 수 없습니다. 색인 스캔 값을 '너무'공통적으로 사용하면 에서 색인을 사용하여 표 스캔을 수행하는 것이 일반적으로 "오른쪽 일"입니다. . abcde를 포함)

VARCHAR

  • VARCHAR(77) 1 + 5 바이트를 차지 - 1 길이, 실제 문자에 대한 5. (기타)

참고 표

  • AUTO_INCREMENTVARCHAR와 2 열의 테이블이.
  • 각 열에 대해 색인을 생성하십시오.
  • 각 새 값에 대해 새 열을 추가하는 코드를 작성하십시오.
  • JOIN을 사용하여 ID에서 문자열을 가져옵니다.
  • id은 1 바이트 TINYINT UNSIGNED (값 0..255) 일 수 있으므로 ENUM과 같은 크기입니다.
  • SMALLINT UNSIGNED (0..65535)이 필요한지 여부를 고려하십시오.
  • 옵션이 많이 늘어날 가능성이있는 경우이 방법이 가장 좋습니다. 보다가 AUTO_INCREMENT ID를 구울 수 있으며, 신속하게 문자열을 처리 할 수있는 255

댓글

  • 모든 변종을 초과하지만, 일부는 (JOIN)를 더 복잡 -
  • INSERT IGNORE주의 다른 사람.
  • VARCHAR은 디스크 공간에서 가장 많은 비용이 듭니다.
  • 일부 상황에서는 엑스트라 테이블의 경우 여분이 JOIN이므로 매우 비쌉니다.

이러한 장단점으로 무장합니다. "최선의 방법"은 없습니다.