복붙노트

[SQL] 우리는 그것없이 가입 할 수있을 때 왜 기본 - 외부 키 관계가 필요합니까?

SQL

우리는 그것없이 가입 할 수있을 때 왜 기본 - 외부 키 관계가 필요합니까?

우리는 기본 및 외래 키 관계없이 두 테이블에서 데이터를 얻을 수 있다면, 왜 우리는이 규칙이 필요하십니까? 당신은 적절한 예와, 명확하게 설명해 주시겠습니까? 그것은 나쁜 구조를 괜찮다, 테스트 데이터베이스입니다.

테이블 '구조 :

**

table - 'test1'
columns - id,lname,fname,dob
no primary and foreign key and also not unique(without any constraints)

**

**table - 'test2'
columns- id,native_city
again, no relations and no constraints** 

나는 아직도, 같은 열 '아이디'와이 테이블에 가입 할 수 있습니다 더 기본 - 외부 키 존재하지 않는 경우는 그래서, 그 사용은 무엇인가?

해결법

  1. ==============================

    1.기본 및 외래 키에 대한 주된 이유는 데이터 일관성을 적용하는 것입니다.

    기본 및 외래 키에 대한 주된 이유는 데이터 일관성을 적용하는 것입니다.

    기본 키는 하나 이상의 열 이상의 값의 고유성의 일관성을 적용합니다. ID 항목은 그 후 기본 키가 있으면 동일한 ID 값을 갖는 두 개의 행을 가질 수 없다. 그 기본 키없이 많은 행은 동일한 ID 값을 가질 수 그리고 당신은 혼자 ID 값을 기반으로 그들 사이에 구별 할 수 없습니다.

    외부 키는 다른 곳에서 데이터를 그 지점의 일관성을 적용합니다. 그것은 지적되는 데이터가 실제로 존재하는지 확인합니다. 일반적인 부모 - 자식 관계에서 외래 키 보장하지만 모든 아이들은 항상 부모에 부모가 실제로 존재 함을 가리키는 지. 외래 키가 없으면 당신은 부모의 포인트가 존재하지 않는 것을 아이들을 "고아"수 있었다.

  2. ==============================

    2.당신은에 가입하기 위해 동일한 유형의 두 개의 열, 각 테이블에 하나가 필요합니다. 그들은 기본 및 외래 키입니다 여부를 중요하지 않습니다 여부.

    당신은에 가입하기 위해 동일한 유형의 두 개의 열, 각 테이블에 하나가 필요합니다. 그들은 기본 및 외래 키입니다 여부를 중요하지 않습니다 여부.

  3. ==============================

    3.당신은 당신이 임의의 열을 가입 할 수 있습니다하는 FK 필요하지 않습니다.

    당신은 당신이 임의의 열을 가입 할 수 있습니다하는 FK 필요하지 않습니다.

    그러나 가입하는 외래 키 보장하지만있는 것은 실제로 무엇인가를 찾는 데 성공합니다.

    외래 키는 당신에게 매우 어려울 그렇지 않으면 구현하기 쉬운 오류 것 특정 보증을 제공합니다.

    당신이 외래 키가없는 경우 예를 들어, 시스템의 상세 레코드를 삽입 할 수 당신은 일치하는 마스터 레코드가있는 다른 사람 삭제이 있음을 확인 직후. 그래서이를 방지하기 위해 당신은 이제까지 당신이 세부 사항 테이블 (또는 그 반대)을 수정할 때, 마스터 테이블을 잠글 필요가있다. 필요하지 않은 경우 / 그 보장을 원하는는 FKS 나사.

    당신의 RDBMS에 따라 또한 외래 키는 선택의 성능을 향상 (뿐만 아니라 업데이트, 삽입 및 삭제의 성능을 저하) 수

  4. ==============================

    4.나는 게시물의 말을 알아,하지만 난 내 자신의 참조를 위해 내가 너무 미래에 참조로 나 자신을 위해 여기에 대답을 넣고 싶었다 있도록 사이트를 사용합니다. 나는 당신이 (다른 사람이)가 도움이 될 수 있기를 바랍니다.

    나는 게시물의 말을 알아,하지만 난 내 자신의 참조를 위해 내가 너무 미래에 참조로 나 자신을 위해 여기에 대답을 넣고 싶었다 있도록 사이트를 사용합니다. 나는 당신이 (다른 사람이)가 도움이 될 수 있기를 바랍니다.

    우리의 데이터베이스를 설계 슈퍼 아인슈타인 전문가의 무리를 척 수 있습니다. 우리의 슈퍼 완벽한 데이터베이스는 3 표, 그들 사이에 정의 된 다음 관계를 맺고있다 :

    TblA 1:M TblB
    TblB 1:M TblC
    
    Notice there is no relationship between TblA and TblC
    

    대부분의 경우 같은 간단한 데이터베이스를 쉽게 탐색 할 수 있지만, 상용 데이터베이스에이 시스템이 얻을 특히, 설계 단계의 모든 가능한 사용과 데이터, 테이블, 심지어 전체 데이터베이스에 대한 사용의 조합에 말할 수 있어야하는 것이 불가능하다 에 내장 및 기타 시스템 통합 또는 주변이나 바꿔 얻을. 이 간단한 사실은 비즈니스 인텔리전스라는 데이터베이스를 기반으로 구축 전체 산업을 낳았다. 하지만 빗나가 다 ...

    위의 경우, 구조는 반대로 당신이 필요로하는 무엇을 얻기 위해 당신이 B에 이르기까지, TBLA에서 가입 할 수 있습니다 볼 쉬운 것을, 그리고 C 및 부사장을 통해 이해하는 것이 매우 간단합니다. 그것은 또한 매우 막연하게 그 일에 몇 가지 문제를 강조한다. 이제 긴 10 개 또는 20 또는 50의 관계에 간단한 체인을 확장합니다. 이제 모든 갑자기 정확히 시나리오에 대한 필요성을 구상하기 시작합니다. 간단히 말해, a는 A로부터 C에 또는 그 반대 또는 A F에 또는 B Z에 또는 무엇이든 우리의 시스템이 성장함에 따라 가입 할 수 있습니다.

    이 실제로 할 수있는 여러 가지 방법이 있습니다. 모든 링크를 통해 운전 가장 인기있는 위에서 언급 한. 가장 큰 문제는 매우 느린 것입니다. 그리고 점진적으로 느리게 당신이 체인에 추가 더 테이블, 더 많은 이들 테이블이 성장하고, 더 당신이 그것을 통해 가고 싶어집니다.

    해결 방법 1 : 공통의 링크를 찾아보십시오. 당신이 명확하지 않은 경우 C.에 가입하는 이유를 가르쳐 경우이 있어야 관계를 만들고 그 위에 다음을 가입 할 수 있습니다. 즉,이 몇 가지 공통점이 수 또는 중 하나를 제로 결과 나 대규모 번호 또는 결과 (직교 제품)을 생산하는 것 가입해야합니다 C를 통해 B를 통해 가입합니다. 이 공통점을 알고 있다면, 단순히 A와 C에 필요한 열을 추가하고 직접 연결합니다.

    관계에 대한 규칙은 단순히 존재하는 이유가 있어야한다는 것입니다. 아무것도 더. 당신이 A로부터 C 링크에 좋은 이유를 찾을 수 있다면 그것을 할. 하지만 당신은 (자신이 이미 다른 방식으로 처리 즉) 이유가 중복되지 확인해야합니다.

    경고 이제 단어. 몇 가지 함정이있다. 그러나 나는 내 소스를 참조 할 수 있도록 그들을 설명하는 대신 여기에 대해서 이야기의 좋은 일을하지 않습니다. 그러나 팬과 틈 트랩에 대한이 비디오는 정말 단지 시작 지점입니다, 그래서이 어떤 무거운 물건에지고, 기억. 당신은 관계없이 가입 할 수 있습니다. 그러나 나는 이것이 대부분의 사람들이 대학과 잘 BI 및 SAP들의 영역으로 배운 것을 넘어로 처음이 동영상을보고 조언한다. 가 프로그램 할 수있는 동안이 녀석, 하루 작업이 것은 정확히 이런 종류의 전문입니다. 어떻게 서로 메이크업 감각 이야기로 방대한 양의 데이터를 얻을 수 있습니다.

    이 동영상은 내가 주제에 건너 한 더 나은 동영상 중 하나입니다. 그리고 그것의 가치는 그의 다른 동영상의 일부를보고. 나는 그에게서 많은 것을 배웠습니다.

  5. ==============================

    5.기본 키는 필요하지 않습니다. 외부 키가 하나 필요하지 않습니다. 당신은 당신이 데이터 유형 일치 하나만큼 소원 또는 일치로 변환하는 모든 열 두 테이블을 조인하는 쿼리를 구성 할 수 있습니다. 어떤 관계 요구는 명시 적으로 존재 없습니다.

    기본 키는 필요하지 않습니다. 외부 키가 하나 필요하지 않습니다. 당신은 당신이 데이터 유형 일치 하나만큼 소원 또는 일치로 변환하는 모든 열 두 테이블을 조인하는 쿼리를 구성 할 수 있습니다. 어떤 관계 요구는 명시 적으로 존재 없습니다.

    이를 위해 당신이 외부를 사용하는이 조인

    select tablea.code, tablea.name, tableb.location from tablea left outer join 
    tableb on tablea.code = tableb.code
    

    밖으로 관계와 참여

    SQL JOIN 형

  6. from https://stackoverflow.com/questions/5771190/why-is-a-primary-foreign-key-relation-required-when-we-can-join-without-it by cc-by-sa and MIT license