어떤 속성을 사용할 수 있습니까? 어떤 애플리케이션이 신경 써야할까요? 예를 들어 똑같은 장소에서 똑같은 순간에 두 사람을 태어날 수는 없지만 그 정확성 수준에서 해당 데이터에 액세스 할 수는 없습니다. 따라서 모델링하려는 애트리뷰트 중에서 허용 가능한 수준의 데이터 무결성을 제공하기에 충분한 애트리뷰트를 결정해야한다. 선택한 항목에 상관없이 데이터 무결성 측면 (동일한 사용자의 여러 행 삽입 방지)에 중점을 둡니다.
다른 테이블의 조인/외부 키의 경우 서로 게이트 키를 사용하는 것이 가장 좋습니다.
기본 키이라는 문구가 잘못 사용되었거나 혼동을 야기하기에 이르렀습니다. 모든 키, 당신은 그것을 플래그 여부를 기본 키, 키이 고유 키, 또는 고유 색인는 여전히 키, 그리고 테이블의 모든 행이의 속성에 대해 고유 한 값을 포함해야합니다 대체 키. 그런 의미에서 모든 키는 동등합니다. 무엇보다 중요한 것은 (의미있는 실제 도메인 모델 데이터 속성에 의존하는) 자연 키인지 또는 대리자 (실제 데이터 속성의 독립)인지 여부입니다.
두 번째로 중요한 것은 .. 대리 키는 좁고 단순하며 결코 바뀌지 않습니다 (아무 이유도 없습니다 - 그들은 아무 의미도 없습니다) 그래서 그들은 조인이나 다른 종속 테이블의 외래 키에 더 나은 선택입니다.
그러나 데이터 무결성을 보장하고 동일한 도메인 엔터티에 대해 여러 행 삽입을 방지하기 위해 이들은 전혀 쓸모가 없습니다. 자연 키, 사용 가능한 데이터 중에서 선택해야합니다. 귀하의 응용 프로그램은 어떤 목적을 위해 모델링됩니다.
키가 100 % 불변 일 필요는 없습니다. 예를 들어 이름과 전화 번호 및 생년월일을 사용하면 (예를 들어, 사람이 이름이나 전화 번호를 변경하더라도 테이블의 값을 간단히 변경할 수 있습니다. 다른 행에 키 속성에 새 값이 이미있는 한 괜찮습니다.
당신이 선택한 키가 99.9 %의 경우에만 작동한다고하더라도 (같은 이름과 전화 번호를 가진 두 사람이 출현 할만큼 불행하고 동시에 우연히 출생 한 경우), 적어도 데이터의 99.9 %는 정확하고 일관성이 보장됩니다. 예를 들어 생년월일을 고유하게 만들거나 키에 다른 속성을 추가하여 구분할 수 있습니다. 변경으로 인해 데이터베이스 전체의 외래 키에서 데이터 값을 업데이트 할 필요가없는 한 (이 키를 다른 곳의 FK로 사용하지 않으므로) 중요한 문제가 발생하지 않습니다.
Oracle PL/SQL에서는 비즈니스 로직을 조작하기 위해 SQL 코드를 작성할 수 있으므로 데이터베이스 수준의 고유성을 유지 관리 할 수 있습니다. 사실 다른 모든 T-SQL 방언은 내가 아는 한 당신에게 그 힘을줍니다. 그러나 이것은 모든 sql 엔진에 대한 표준 동작이 아닙니다. 독창성은 요구 사항에서 비즈니스 논리 문제로 간주됩니다. 그래서 응용 프로그램에서 이동하십시오. – user114285