나는 필요 가 매우 강한 단어 라고 생각 하며, 엄밀히 말하면 테이블에는 대리 키 가 필요 하지 않을 것입니다 .
그러나 그것이 내 데이터베이스라면 어쨌든 대리 키를 추가 할 것입니다. 표준이 얼마나 안정적인지에 관계없이 데이터베이스 설계가 여러 타사 (IATA, ISO)에 의존하기를 원하지 않을 수도 있습니다. 또는 특정 표준에 전혀 의존하고 싶지 않을 수도 있습니다 (다른 통화 코드 표준이 있습니까? 모릅니다). 아마도 대리 키를 사용하여 테이블을 모델링 할 것입니다.
+-------------------------+ +------------------------+
|Airport | |Country |
|-------------------------| |------------------------|
|airport_id int (PK)| |country_id int (PK) |
|iata_airport_code string | |iso_country_code string |
|icao_airport_code string | +------------------------+
|faa_identifier string |
|address string |
|name string |
+-------------------------+
+-------------------------+
|Currency |
|-------------------------|
|currency_id int (PK) |
|iso_currency_code string |
|name string |
+-------------------------+
다시 말해서, 해당 산업 표준 코드가 본질적 으로 내 응용 프로그램에 중요 하지 않으면 내 테이블의 PK로 사용하지 않을 것입니다. 그들은 단지 레이블입니다. 다른 대부분의 테이블에는 어쨌든 대리 키가있을 수 있으며이 설정은 데이터 모델에 일관성을 추가합니다. 대리 키를 '추가'하는 비용은 최소입니다.
일부 의견을 기반으로 업데이트 :
예제 테이블의 컨텍스트를 알지 못하면 IATA 공항 코드와 같은 것이 데이터베이스를 사용하는 응용 프로그램에 얼마나 중요한지 알 수 없습니다. 분명히, IATA 코드가 응용 프로그램 전체에 걸쳐 중요하고 널리 사용되는 경우, 적절한 분석 후 코드를 테이블의 PK로 사용하는 것이 올바른 결정일 수 있습니다.
그러나 테이블이 앱의 몇 구석에서 사용되는 조회 테이블 인 경우, IATA 코드의 상대적 중요성은 데이터베이스 인프라에서 이러한 중요한 지점을 정당화하지 못할 수 있습니다. 물론, 여기저기서 몇 가지 쿼리에 추가 조인을해야 할 수도 있지만, IATA 코드 작성의 의미를 완전히 이해하기 위해 연구를 수행하는 데 드는 노력과 비교할 때 그 노력은 사소한 것일 수 있습니다. 기본 키 필드 어떤 경우에는 신경 쓰지 않을 뿐만 아니라 IATA 코드 를 신경 쓰지 않아도됩니다 . 아래의 @James Snell의 의견은 테이블의 PK에 영향을 줄 염려가 필요없는 완벽한 예입니다.
또한 디자인의 일관성이 중요합니다. 대리 키를 일관되게 설계 한 수십 개의 테이블이있는 데이터베이스와 타사 코드를 PK로 사용하는 몇 개의 조회 테이블이 있으면 불일치가 발생합니다. 그것은 완전히 나쁘지는 않지만 문서화에 대해서는 특별한주의가 필요하며 보증되지 않을 수도 있습니다. 그들은있는 거 룩업 테이블 선 (善)을 위해서, 그냥 일관성을 위해 대용 키를 사용하여 완벽하게 괜찮습니다.
추가 연구를 기반으로 업데이트 :
좋아, 호기심이 나를 물었고 나는 질문에 제공된 링크로 시작하여 재미를 위해 IATA 공항 코드에 대한 조사를하기로 결정했습니다.
결과적으로, IATA 코드는 질문 에서처럼 보편적이고 권위적이지 않습니다. 이 페이지 에 따르면 :
대부분의 국가 는 공식 항공 출판물에서 IATA 코드가 아닌 4 자 ICAO 코드를 사용 합니다.
또한 IATA 코드 및 ICAO 코드는 비행장을 식별하는 또 다른 방법 인 FAA 식별자 코드 와 다릅니다 .
이 문제를 제기하는 데있어 요점은 어떤 코드가 더 우수하거나 더 보편적이거나 더 권위 있고 포괄적인지에 대한 토론을 시작하는 것이 아니라 임의의 타사 식별자를 중심으로 데이터베이스 구조를 디자인하는 것이 내가 선택한 것이 아닌 이유를 정확하게 보여주는 것입니다 , 거기 않는 한 특정 비즈니스 이유는 그렇게 할 수 있습니다 .
이 경우, 기분이 내 데이터베이스가 기본 키 후보로 IATA 코드 (또는 제 3 자, 잠재적으로 변경 코드)를 삼가고 및 대리 키를 사용하여 더 나은, 더 안정을 구조화하고, 더 유연 할 것입니다. 이렇게하면 기본 키 선택으로 인해 발생할 수있는 잠재적 인 함정을 잊을 수 있습니다.