2013-10-21 3 views
4

내 질문에 다소 모호하지만, 국가/주소를 관리하는 것이 실제로 매우 일반적이기 때문에 실제 설정에 대한 조언을 받고 싶습니다.데이터베이스를 관리하는 방법

"국가"열이있는 데이터베이스가 있는데, 이전에는 중형 int 유형으로 국가 (ID, 이름 및 ISO3166-1 alpha2 코드 주로)에 대한 실제 정보가있는 다른 테이블의 외래 키 역할을합니다.

일부 테스트 및 벤치마킹을 마친 후에 필자는 모든 국가 정보를 PHP 파일 배열 대신 필요에 따라 필요로하고 결국 데이터베이스 검색보다 1 ~ 2 배 더 빨랐습니다. (그들은 278 개국이다).

분명히 더 나은 접근법이지만 사람들이 일반적으로 파일 대신 테이블에서 읽는 이런 종류의 일을하는 경향이 있기 때문에 뭔가 잘못된 것처럼 느껴집니다. 그러나 나는 그것이 무엇인지 알아낼 수 없습니다. 유지 보수가 용이합니까?

또한 숫자 ID 대신 2 글자 ISO 코드를 키로 생각했습니다. 사람이 읽을 수 있고 고유합니다. 내가 400.000 행 테이블에서 눈에 띄는 성능 손실을 볼 수 내 데이터베이스가 커지면이 오류가 끝날까요?

+1

country 테이블을 사용하여 데이터베이스를 쿼리 한 적이 있습니까? 하나는 select에 참여하거나 두 개의 select는 선택 사항입니까? 외래 키 열에 인덱스를 사용 했습니까? –

+1

그리고 컨트리 테이블의 기본 키를 설정 했습니까? 1000 개의 루프마다 PHP 국가 파일을 필요로 했습니까? 아니면 한 번 필요합니다. 그런 다음 동일한 PHP 프로세서 호출 중에 1000 개의 짧은 루프를 작성 했습니까? –

+0

예 열의 색인이 생성되고 실제로 조인도 아니고 2 개의 선택도 아니 었습니다. 나는 이것을 WHERE 절의 조건과 같이 'SELECT * FROM table where country = 253'과 같이 사용하고 심지어 파일을 요구하는 것이 더 빠릅니다. 그리고 나는 그 파일을 한 번 필요로했다. – aleation

답변

2

일반적으로 함께 변하는 것을 함께 유지하고자합니다. 따라서 주요 데이터가 SQL 데이터베이스에있는 경우 데이터베이스에 국가 데이터를 저장하면 SQL 데이터베이스에 많은 데이터가 있다는 사실을 모른 채 누군가 PHP 조회 배열을 변경하는 것과 같은 광란을 피할 수 있습니다.

중복 방지에도 도움이됩니다. 시스템 (예 : 관리 시스템) 용으로 두 번째 응용 프로그램을 만들면 국가 조회 PHP 파일 2 부로 끝나지 않습니다. 중복은 개발자가 데이터베이스와 조회 파일 중 하나를 변경하지만 버그는 수정할 기회를 만듭니다.

이 모든 것은 오히려 방어 적이지만 응용 프로그램은 예기치 않은 방식으로 발전하는 경향이 있으며 일반적으로 버그를 피하는 것이 좋습니다.

내 경험에 비추어 볼 때, 두 테이블 간의 조인을 사용하면 언급 된 숫자가 잘 조정 된 시스템에 성능에 미치는 영향이 거의 없습니다. PHP로 조회를 이동하기 전에 SQL을 최적화 했습니까?

+0

예 테스트 전에 테이블이 최적화되었습니다. 그리고 @ mas.morozov가 내 큰 실수를 지적한 후에 좀 더 테스트를 해봤지만 성능은 여전히 ​​파일을 읽는 것이 더 좋았지 만 프로젝트가 확장되면 데이터베이스에서 국가를 유지하는 것이 더 쉽고, 어쨌든 성능 향상은 거의 눈에 띄지 않을 것입니다. 그래서 나는 데이터베이스에 국가를 유지하게 될 것이라고 생각하지만 숫자 코드 대신 ISO CODE를 외래 키로 사용합니다. – aleation

관련 문제