2012-03-19 4 views
0

utf8에 국가 및 도시 이름 목록이 있습니다. 두 목록 중 하나를 가져 오면 입력 한 것과 같은 순서로 반환해야합니다. 예를 들어숫자가 아닌 PK 필드 - 데이터베이스 디자인 문제

:

Country(country_name|PK) 
City(city_name|PK, country_name|FK) 

COUNTRY_NAME 및 CITY_NAME는 고정 값을 변경하지 않을 것이다. 그러나 주문이 문제가됩니다. 내가 한 최대의 sortcountry하는 것이다 수치라는 새 열을 추가

Country: 
UK 
US 
Africa 

으로 주문 값이 입력 된 유지 확인하십시오.

Country(country_name|PK, sortcountry) 

동일한 내용이 City 테이블에 적용됩니다.

나는 이것이 country(country_id, countryname)보다 나은 해결책이라고 생각합니다. 내가 옳은 일을하고 있니?

답변

0

정렬이 다른 자연 규칙을 따르지 않는 경우 정렬에 열을 추가하는 데 문제가 없습니다.

그러나 데이터는 주/클러스터 된 인덱스에 따라 디스크에 저장되므로 sortcountry 만있는 기본 키를 원할 수 있습니다. 모든 국가를 normaly로 선택하면 정확한 순서로 디스크에서 읽을 수 있습니다.

그런 다음 country_name에 다른 고유 색인을 추가하여 각 이름이 고유하고 (기본 키가있는 것처럼) 검색 가능하도록하십시오. sortcountry를 키로 사용하여 업데이트를 실행하지 않으려 고합니다.

+1

디스크에 PK 순서로 항목을 저장하는 MySQL에 의존하는 것은 안전하지 않습니다. 몇 백 라인을 선택하고 주문하면 일반적으로 문제가 발생하지 않습니다. 논리적으로 데이터를 구조화합니다 (즉, country_id를 PK로, 별도의 정렬 열로). 앱의 다른 곳에서 최적화해야 할 더 큰 성능 문제가 발생할 가능성이 있습니다. – liquorvicar

+0

불필요한 내부 결합을 피하려고했습니다. 방금 한 일을함으로써, 나는 가입하지 않고도 각 쿼리에 대한 도시 목록을 가져올 수 있습니다. 대체 무엇일까? sortcountry에 PK를 할당 한 다음 sortcountry (FK) 옆에 countryname을 추가 하시겠습니까? 좋은 대안 솔루션입니까? 참고 : sortcountry는 country_id를 나타냅니다. – user311509

0

"올바른 일을하고 있습니까?"

절대적으로 아닙니다.

쿼리 결과에는 고유 한 순서가 없습니다. 엔진이 조회 결과를 특정 순서로 리턴하게하려면 ORDER BY 절을 사용하여 해당 순서를 지정하십시오.

+0

예, sortcolumn ASC를 기준으로 정렬하십시오. 국가 목록은 순서가 맞지 않습니다. 편지 A로 시작하는 국가는 목록의 어디에서나 가능합니다. ORDER BY를 수행하면 글자를 기준으로 정렬되므로 기존 순서를 위반하게됩니다. 어쨌든 sortcolumn을 제거하기로 결정한 것은 country_name을 반홖하는 것이 ORDER를 사용하지 않는 한리스트를 반환하기 때문입니다. 의견이 있으시면 언제든지 알려주십시오. – user311509