SQL 또는 관계형 모델은 자연 키를 참조하는 외래 키에 의해 방해받지 않습니다. 실제로, 자연 키를 참조하면 성능이 크게 향상되는 경우가 많습니다. 필요한 정보가 자연 키에 얼마나 자주 포함되어 있는지 놀랄 것입니다. 키를 참조하면 더 넓은 테이블에 대한 조인이 거래되므로 결과적으로 한 페이지에 저장할 수있는 행 수가 줄어 듭니다.
정의에 따라 필요한 정보는 항상 모든 "조회"테이블의 기본 키에 완전히 포함되어 있습니다. ( 룩업 테이블 이라는 용어 는 비공식적입니다. 관계형 모델에서는 모든 테이블이 테이블 일뿐입니다. 미국 우편 번호 테이블에는 {AK, Alaska}, {AL, Alabama}, {AZ, Arizona}와 같은 행이있을 수 있습니다. 대부분의 사람들은이를 룩업 테이블이라고 부릅니다.)
큰 시스템에서 둘 이상의 후보 키가있는 테이블을 찾는 것은 드문 일이 아닙니다. 엔터프라이즈의 한 부분을 제공하는 테이블이 하나의 후보 키를 참조하는 테이블과 엔터프라이즈의 다른 부분을 제공하는 테이블이 다른 후보 키를 참조하는 것도 드문 일이 아닙니다. 이것은 관계형 모델의 장점 중 하나이며 SQL이 지원하는 관계형 모델의 일부입니다.
서로 게이트 키가있는 테이블에서 자연 키를 참조하면 두 가지 문제가 발생합니다.
첫째, 당신은 사람들을 놀라게 할 것입니다. 나는 보통 최소한의 서프라이즈 원칙을 강하게 로비하지만 , 이것은 사람들을 놀라게하지 않는 한 가지 상황이다. 문제는 개발자가 외래 키를 논리적으로 사용하는 것에 놀랐을 때 해결책은 재 설계가 아닌 교육입니다.
둘째, ORM은 일반적으로 관계형 모델을 중심으로 설계되지 않았으며 때로는 모범 사례를 반영하지 않는 가정을 구현합니다. (실제로 이들은 데이터베이스 전문가의 입력 없이도 종종 설계되는 것 같습니다.) 모든 테이블에서 ID 번호를 요구하는 것이 그러한 가정 중 하나입니다. 다른 하나는 ORM 응용 프로그램이 데이터베이스를 "소유"한다고 가정합니다. 따라서 테이블과 열을 생성, 삭제 및 이름을 바꿀 수 있습니다.
저는 30 년 동안 최소한 24 개 이상의 언어로 작성된 수백 개의 응용 프로그램에 데이터를 제공하는 데이터베이스 시스템을 연구했습니다. 해당 데이터베이스는 ORM이 아닌 엔터프라이즈에 속합니다.
주요 변경 사항을 소개하는 포크는 쇼 스토퍼 여야합니다.
내가 일했던 회사에서 자연 키와 대리 키를 모두 사용하여 성능을 측정했습니다. 서로 게이트 키가 자연 키보다 성능이 뛰어 나기 시작하는 팁이 있습니다. ( 파티션, 부분 인덱스, 함수 기반 인덱스, 추가 테이블 스페이스, SSD (Solid-State Disk) 사용 등)와 같은 자연스러운 키 성능을 유지하려는 추가 노력이 없다고 가정하면 해당 회사에 대한 제 추정치에 따르면 그 사이에, 그들은 자연 키로 더 나은 성능을 얻습니다.
다른 관련 답변 : 데이터베이스 스키마 혼동