복붙노트

[SQL] 기본 키 / 외래 키 이름 지정 규칙 [마감]

SQL

기본 키 / 외래 키 이름 지정 규칙 [마감]

우리 dev에 그룹에서 우리는 기본 및 외래 키에 대한 명명 규칙에 관한 격렬한 논쟁이있다. 우리 그룹의 생각의 두 학교는 기본적으로있다 :

1:

Primary Table (Employee)   
Primary Key is called ID

Foreign table (Event)  
Foreign key is called EmployeeID

또는

2:

Primary Table (Employee)  
Primary Key is called EmployeeID

Foreign table (Event)  
Foreign key is called EmployeeID

나는 모든 열에서 테이블의 이름을 중복하지 않으려는 (I 위의 옵션 1을 선호 그래서). 개념적으로, 당신은 속성 이름에 개체의 이름을 사용하지 않는 다른 언어 권장 관행의 많은 일치한다. 나는 외래 키 직원 ID를 이름 (또는 EMPLOYEE_ID가 더 좋을 수도 것은)는 직원 테이블의 ID 열임을 독자를 알려줍니다 생각합니다.

일부 다른 열 이름이 데이터베이스에 걸쳐 동일 있도록 테이블 이름 접두사 기본 키의 이름을 옵션 2를 선호합니다. 나는 그 점을 볼 수 있지만, 당신은 지금 시각적으로 외래 키에서 기본 키를 구별 할 수 없습니다.

또한, 나는 당신이 개체와 그 개체의 속성이나 속성으로 컬럼과 테이블을 생각하면, 당신은 직원의 ID 속성으로 생각 있기 때문에, 열 이름에 테이블 이름을 가지고 중복 생각, 직원이 아닌 직원 ID 속성. 나는 그의 인물 또는 PersonGender가 무엇인지 내 동료를 요구하지 않습니다. 나는 그의 나이가 무엇인지 물어.

제가 말씀과 같이, 그것은 격렬한 논쟁 그리고 우리는과에 그것에 대해 이동합니다. 나는 새로운 시각을 얻을 관심이 있어요.

해결법

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

    1.정말 중요하지 않습니다. 나는 선택 1과 선택 2 사이의 진정한 차이가 시스템에 실행 적이 없다.

    정말 중요하지 않습니다. 나는 선택 1과 선택 2 사이의 진정한 차이가 시스템에 실행 적이 없다.

    제프 앳 우드 좋은 글이 주제에 잠시 뒤로했다. 기본적으로 사람들이 토론하고 그들이에 잘못을 입증 할 수없는 가장 격렬하게 해당 주제를 주장한다. 아니면 다른 각도에서 만 해적 스타일의 내구성을 기반으로 마지막 사람이 서 인수를 통해 획득 할 수있는 그 주제.

    하나를 선택하고 실제로 당신의 코드에 영향을 미칠 문제에 초점을 그들에게 말해.

    편집 : 당신이 재미를 원한다면, 그 방법은 재귀 테이블 참조 우수한 왜 그들이 길이를 지정합니다.

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

    2.두 열이 두 테이블에서 같은 이름 (규칙 # 2)가있는 경우, 당신은 몇 가지 입력 및 일부 상용구 노이즈를 저장하는 SQL의 사용 구문을 사용할 수 있습니다 :

    두 열이 두 테이블에서 같은 이름 (규칙 # 2)가있는 경우, 당신은 몇 가지 입력 및 일부 상용구 노이즈를 저장하는 SQL의 사용 구문을 사용할 수 있습니다 :

    SELECT name, address, amount
      FROM employees JOIN payroll USING (employee_id)
    

    규칙 # 2의 찬성 또 다른 인수는 관계형 모델이 디자인 된 방법이다.

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

    3.나는 그것을 함께 넣어 당신의 방법을 응용 프로그램에 따라 다릅니다 생각합니다. 당신이 객체를 표현하기 위해 테이블을 ORM을 사용하거나 디자인 할 경우, 옵션 1은 당신을 위해 할 수있다.

    나는 그것을 함께 넣어 당신의 방법을 응용 프로그램에 따라 다릅니다 생각합니다. 당신이 객체를 표현하기 위해 테이블을 ORM을 사용하거나 디자인 할 경우, 옵션 1은 당신을 위해 할 수있다.

    나는 그것의 자신의 레이어로 데이터베이스를 코딩하고 싶다. 나는 모든 것을 제어하고 응용 프로그램은 저장 프로 시저를 호출합니다. 반환에 합류 많은 테이블과 많은 열이 특히 때, 완전한 열 이름을 가진 결과 집합을 가지고 좋은 것입니다. 옵션 2. 같은이 응용 프로그램의 STYPE, I와 정말 같은 열 이름에 조인 일치를 확인합니다. 나는 그들이 일치하지 않는 오래된 시스템에서 작업 한 그것은 악몽이었다,

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

    4.나도 규칙은 왜 모두 하나가, 모든 경우에 작동하지 않습니다? 사용 공통 감각 ...

    나도 규칙은 왜 모두 하나가, 모든 경우에 작동하지 않습니다? 사용 공통 감각 ...

    예를 들어, 두 개의 FK 열이 같은 이름을 할 수 없기 때문에 자기 참조 같은 테이블의 PK, 당신은 예를 들면 ..., 모두 "표준"을 위반했다고 하나 개 이상의 FK 컬럼이 있습니다 자체 참조 테이블에 대한 , 직원 ID PK, SupervisorId FK, MentorId Fk를, PARTNERID FK와 EmployeeTable, ...

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

    5.나는 그들 사이에서 선택을 조금 있다는 것을 동의합니다. 나에게 하나의 표준에 대한 훨씬 더 중요한 점은 "표준"부분입니다.

    나는 그들 사이에서 선택을 조금 있다는 것을 동의합니다. 나에게 하나의 표준에 대한 훨씬 더 중요한 점은 "표준"부분입니다.

    사람들이 '자신의 일을'시작하면 그들은 그들의 nethers에 의해 중독되어야한다. 이럴 :)

  6. ==============================

    6.당신은 다음과 같은 생각 해 봤나?

    당신은 다음과 같은 생각 해 봤나?

    Primary Table (Employee)   
    Primary Key is PK_Employee
    
    Foreign table (Event)  
    Foreign key is called FK_Employee
    
  7. ==============================

    7.나는 일이 아주 가까이 A와,를 제외하고 우리는 복수형의 테이블 이름을한다는 것입니다 우리가 사용하는 규칙 (즉, "직원") 테이블 및 열 이름 사이에 사용 밑줄. 그것의 장점은 그 열을 참조하는 것입니다, 당신이 액세스 그것에 방법에 따라 중 하나 "직원 _ ID"또는 "employees.id"입니다. 당신이 열로부터 오는 어떤 테이블을 지정해야하는 경우 "employees.employees _ ID는"확실히 중복됩니다.

    나는 일이 아주 가까이 A와,를 제외하고 우리는 복수형의 테이블 이름을한다는 것입니다 우리가 사용하는 규칙 (즉, "직원") 테이블 및 열 이름 사이에 사용 밑줄. 그것의 장점은 그 열을 참조하는 것입니다, 당신이 액세스 그것에 방법에 따라 중 하나 "직원 _ ID"또는 "employees.id"입니다. 당신이 열로부터 오는 어떤 테이블을 지정해야하는 경우 "employees.employees _ ID는"확실히 중복됩니다.

  8. ==============================

    8.당신이 응용 프로그램 코드뿐 아니라 데이터베이스 쿼리에서 찾고 있다면, 몇 가지 내게 분명한 것 같다 :

    당신이 응용 프로그램 코드뿐 아니라 데이터베이스 쿼리에서 찾고 있다면, 몇 가지 내게 분명한 것 같다 :

  9. ==============================

    9.규칙 # 2 같은 나는 -이 주제를 연구하고, 내 자신을 게시하기 전에이 질문을 찾는, 어디서 문제로 실행 :

    규칙 # 2 같은 나는 -이 주제를 연구하고, 내 자신을 게시하기 전에이 질문을 찾는, 어디서 문제로 실행 :

    나는 열 많은 수의 테이블에서 *를 선택하고 유사 열 수가 많은 두 번째 테이블에 합류하고있다. 두 테이블은 기본 키와 같은 "ID"열이 있고, 수단 것을 나는 (내가 아는까지로) 특별히 즉 결과에서 두 값이 고유하게하기 위해 모든 열을 선택해야합니다 :

    SELECT table1.id AS parent_id, table2.id AS child_id
    

    난 여전히 같은 이름을 가진 결과의 일부 열이있을 것이다 컨벤션 # 2 수단을 사용하지만 스티븐 Huwig는 또한, USING 문 단순화 것을 제안, 지금, 어떤 아이디 I 필요 (상위 또는 하위)를 지정할 수 있습니다.

  10. ==============================

    10.난 항상 FK 같은 다른 테이블에 하나의 테이블과 userId를에 PK로 사용자 ID 사용했습니다. '심각 다른 하나를 식별하는 이름으로 userIdPK 및 userIdFK 사용에 대한 생각 해요. 테이블을 볼 때 그것은 나를 빨리 PK와 FK를 식별하는 데 도움이됩니다보다 쉽게 ​​이해하고 데이터에 액세스 PHP / SQL을 사용하는 경우이 코드를 지 웁니다처럼 보인다. 내 코드에서 특히 다른 사람 보인다.

    난 항상 FK 같은 다른 테이블에 하나의 테이블과 userId를에 PK로 사용자 ID 사용했습니다. '심각 다른 하나를 식별하는 이름으로 userIdPK 및 userIdFK 사용에 대한 생각 해요. 테이블을 볼 때 그것은 나를 빨리 PK와 FK를 식별하는 데 도움이됩니다보다 쉽게 ​​이해하고 데이터에 액세스 PHP / SQL을 사용하는 경우이 코드를 지 웁니다처럼 보인다. 내 코드에서 특히 다른 사람 보인다.

  11. ==============================

    11.나는 규칙 # 2를 사용합니다. 나는 주어진 테이블에 무엇의 약자인지 모르는 경우 지금은 레거시 데이터 모델로 일하고 있어요. 어디에서 자세한되고있는 해이다?

    나는 규칙 # 2를 사용합니다. 나는 주어진 테이블에 무엇의 약자인지 모르는 경우 지금은 레거시 데이터 모델로 일하고 있어요. 어디에서 자세한되고있는 해이다?

  12. ==============================

    12.어떻게 외래 키 이름 지정

    어떻게 외래 키 이름 지정

    ROLE_ID

    역할이 역할이다 참조 된 개체는 손을 테이블에 관련이있다. 이것은 동일한 테이블 재귀 참조 FKS 복수의 문제를 해결한다.

    많은 경우에 참조 된 테이블의 이름과 동일합니다. 이 경우에 당신의 제안 중 하나에 동일하게된다.

    긴 인수 참 어떤 경우에는 나쁜 생각

  13. ==============================

    13."의 경우"직원 INNER가 order.employee_id = employee.id ON 위해 가입하세요 "추가 자격이 필요하다?".

    "의 경우"직원 INNER가 order.employee_id = employee.id ON 위해 가입하세요 "추가 자격이 필요하다?".

    필자가 이야기 자격이 이미 있기 때문에 추가 자격에 대한 필요가 없습니다.

    "비즈니스 사용자가 주문 ID 또는 직원 ID를 참조하는 이유는 컨텍스트를 제공하는 것입니다,하지만 당신은 테이블에 refereing되기 때문에 dabase 수준에서 이미 컨텍스트가".

    열이 'ID'를 이름을 지정하면기도 후 어떻게 "refereing [원문] 테이블에"있다, 말해 않는 한 정확히 필자가 이야기하는 방식으로 ID 열이 참조를 정규화하여, 정확하게 수행?

  14. from https://stackoverflow.com/questions/1369593/primary-key-foreign-key-naming-convention by cc-by-sa and MIT license