[SQL] 관계형 데이터베이스 설계 질문 - 대리 - 키 또는 자연 키?
SQL관계형 데이터베이스 설계 질문 - 대리 - 키 또는 자연 키?
어느 하나가 가장 좋은 방법과 이유는?
외래 키는 user.type에서 type.id이다 :
외래 키는 user.type에서 type.typeName이다 :
해결법
-
==============================
1.나는 실제로, 자연 키를 사용하여 거의 최선의 선택입니다 있다고 생각합니다. 아마 첫 번째 예에서와 같이 서로 게이트 키 접근 갈 것입니다.
나는 실제로, 자연 키를 사용하여 거의 최선의 선택입니다 있다고 생각합니다. 아마 첫 번째 예에서와 같이 서로 게이트 키 접근 갈 것입니다.
다음은 자연 키 방식의 주요 단점이 있습니다 :
-
==============================
2.당신이 전체 사용자 테이블을 업데이트하지 않고 유형을 나타내는 문자열을 변경 할 수 있기 때문에 첫 번째는, 더 미래의 증거입니다. 즉 당신은 대리 키, 유연성을 위해 도입 된 추가 불변의 식별자를 사용합니다.
당신이 전체 사용자 테이블을 업데이트하지 않고 유형을 나타내는 문자열을 변경 할 수 있기 때문에 첫 번째는, 더 미래의 증거입니다. 즉 당신은 대리 키, 유연성을 위해 도입 된 추가 불변의 식별자를 사용합니다.
-
==============================
3.자연 키 고유성 측면에서 좋은 선택이 정말하지 않을 때 (대신 이름과 같은 자연 키의) 대리 키를 사용하는 좋은 이유이다. 내 생애에서 내가 4 "크리스 스미스"의보다 적은 알려져 있지했습니다. 사람 이름이 고유하지 않습니다.
자연 키 고유성 측면에서 좋은 선택이 정말하지 않을 때 (대신 이름과 같은 자연 키의) 대리 키를 사용하는 좋은 이유이다. 내 생애에서 내가 4 "크리스 스미스"의보다 적은 알려져 있지했습니다. 사람 이름이 고유하지 않습니다.
-
==============================
4.나는 대리 키를 사용하는 것을 선호합니다. 그것은 종종 사람들이 의지의 정체성과 그들이 값을 변경하기로 결정한 때까지 잠시 동안 잘 될 것입니다 자연 키를 사용합니다. 그런 다음 문제가 시작합니다.
나는 대리 키를 사용하는 것을 선호합니다. 그것은 종종 사람들이 의지의 정체성과 그들이 값을 변경하기로 결정한 때까지 잠시 동안 잘 될 것입니다 자연 키를 사용합니다. 그런 다음 문제가 시작합니다.
-
==============================
5.(당신이 유형의 이름을 변경하는 경우, 당신은 사용자 테이블을 업데이트 할 필요가 없습니다 그 방법)보다 훨씬 작의 INT의 전체 테이블로 당신은 아마 항상, 그것은 또한 당신이 당신의 datasize 아래로 유지 할 수있는 ID 번호를 사용한다 45 문자 VARCHAR에 가득.
(당신이 유형의 이름을 변경하는 경우, 당신은 사용자 테이블을 업데이트 할 필요가 없습니다 그 방법)보다 훨씬 작의 INT의 전체 테이블로 당신은 아마 항상, 그것은 또한 당신이 당신의 datasize 아래로 유지 할 수있는 ID 번호를 사용한다 45 문자 VARCHAR에 가득.
-
==============================
6.TYPENAME 자연 키 인 경우는이 값을 얻기 위해 가입이 필요하지 않기 때문에, 그것은 아마도 바람직하고 있습니다.
TYPENAME 자연 키 인 경우는이 값을 얻기 위해 가입이 필요하지 않기 때문에, 그것은 아마도 바람직하고 있습니다.
당신은 정말 이름 변경 가능성이 대리 키 (ID)를 사용합니다.
-
==============================
7.너무 나를 위해 대리 키하시기 바랍니다.
너무 나를 위해 대리 키하시기 바랍니다.
당신은 몇 가지 코드를 세게 할 필요가있을 때 다른 하나는 더 쉬울 수도 있지만 결국 어렵게 될 것입니다. 위로 하루에, 내 하이테크 상사는 기본 키 좋은 생각으로 이메일 요지를 사용하여 결정했다. 사람들이 정말 빨려 자신의 주소 변경을 원 할 때 필요도없이, 말을.
-
==============================
8.그들이 작동 할 때마다 자연 키를 사용합니다. 이름은 일반적으로 작동하지 않습니다. 그들도 변경할 수 있습니다.
그들이 작동 할 때마다 자연 키를 사용합니다. 이름은 일반적으로 작동하지 않습니다. 그들도 변경할 수 있습니다.
당신이 당신의 자신의 데이터를 발명하는 경우뿐만 아니라 syntheic 키를 발명 있습니다. 당신이 다른 사람이나 자신의 소프트웨어가 제공하는 데이터의 데이터베이스를 구축하는 경우, 그들이 필요로 식별 그 일을 식별하는 방법을 확인하기 위해 원본 데이터를 분석 할 수 있습니다.
그들은 모두 잘 데이터를 관리하는 경우, 그들은 중요한 물건에 대한 작업이 자연 키가됩니다. 중요하지 않은 물건을 들어, 자신을 맞게.
-
==============================
9.글쎄 또한 surrgote 키를 유지하기 위해 적은 오버 헤드를 구현하기가 쉽고입니다 ... 당신이 값이 관련되고 의미있는 기본 키가 될 것입니다 어떠한 고유하게 식별 키가없는 경우 surrgote 키가 도움이된다 생각합니다.
글쎄 또한 surrgote 키를 유지하기 위해 적은 오버 헤드를 구현하기가 쉽고입니다 ... 당신이 값이 관련되고 의미있는 기본 키가 될 것입니다 어떠한 고유하게 식별 키가없는 경우 surrgote 키가 도움이된다 생각합니다.
그러나 다른 한편으로 서로 게이트 키에 가끔 테이블에 가입하여 별도의 비용을 것입니다. 나는이 ... '사용자'에 대해 생각
UserId varchar(20), ID int, Name varchar(200)
테이블 구조 등.
지금 누가 기록을 삽입 그대로 내가 기본 키로 ID를 사용하면 내가 ... 여러 테이블에 트랙을하려는 생각 다음 [1,2,3,4,5 ..] 등 외국 테이블에있을 것이며, 내가 데이터를 삽입 누구인지해야 할 때마다 난 1,2,3,4,5,6 의미가 있기 때문에 그것으로 사용자 테이블에 가입했습니다. 하지만 난 유일하게 때로는 쉽게 구별하고 의미가있는 저장됩니다 등 외국 테이블 [linda123 존, 애니, 나디아,]에 다음 식별되는 기본 키로 사용자 아이디를 사용하는 경우. 그래서 내가 쿼리를 수행 할 때 사용자 테이블마다 가입 할 필요가 없습니다.
그러나 VARCHAR가 추가 바이트를 취 외국 테이블에 저장됩니다 일부 여분의 물리적 공간을 차지 .. 그리고 당연히 색인 상당한 성능 문제를 가지고, 그것을 마음 어디 INT 수행 더 나은보다는 VARCHAR
-
==============================
10.대리 키는 자연의 기본 키에 대한 대체입니다. 이 테이블에 기본 키에 사용할 수있는 각 행 단지 고유 식별자 또는 숫자이다. 대리 기본 키에 대한 유일한 요구 사항은 테이블의 각 행에 대해 고유 한 것입니다.
대리 키는 자연의 기본 키에 대한 대체입니다. 이 테이블에 기본 키에 사용할 수있는 각 행 단지 고유 식별자 또는 숫자이다. 대리 기본 키에 대한 유일한 요구 사항은 테이블의 각 행에 대해 고유 한 것입니다.
자연의 기본 키 (고객 테이블 즉, 고객 번호)를 변경할 수 있기 때문에 유용하고이 업데이트가 더 어려워집니다.
from https://stackoverflow.com/questions/3747730/relational-database-design-question-surrogate-key-or-natural-key by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 문자열에서 데이터베이스 쿼리를 구성 할 때 ColdFusion은 추가 따옴표를 추가 (0) | 2020.04.22 |
---|---|
[SQL] SQL에 대한 RBAR 대 설정 기반의 프로그래밍 (0) | 2020.04.22 |
[SQL] 다른 컬럼의 MySQL의 그룹에 의해 합계 총 가치 (0) | 2020.04.22 |
[SQL] FRM과 IBD 파일에서 테이블 구조를 복원 (0) | 2020.04.22 |
[SQL] 어떻게 거래 / SQL에서 피벗 테이블을 만드는 방법? (0) | 2020.04.22 |