복붙노트

[SQL] 데이터베이스 테이블의 ID 컬럼의 이름 지정

SQL

데이터베이스 테이블의 ID 컬럼의 이름 지정

나는 데이터베이스 테이블의 ID 컬럼의 이름에 대한 사람들의 의견을 궁금 해서요.

내가 ID 열을 기본 키와 송장라는 테이블이 있다면 나는 내가 다른 테이블과 충돌하지 않을 것이라고 그 열 InvoiceID를 호출 할 것이고, 그것이 무엇인지 분명하다.

내가하고 있어요 경우 현재 그들은 모두 ID 열 ID를 불렀다.

그들은 다음을 수행 할 수 있도록 :

Select  
    i.ID 
,   il.ID 
From
    Invoices i
    Left Join InvoiceLines il
        on i.ID = il.InvoiceID

지금, 나는 여기에 몇 가지 문제를 참조하십시오 1. 당신은 별명에 선택에 열을 필요 = InvoiceID 내 뇌 2. ID 맞지 않는 3. 테이블 별명을하지 않았고 그것은에 어떤 테이블에 분명하다 InvoiceID라고하면?

주제에 대한 다른 사람들의 생각은 무엇입니까?

해결법

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

    1.ID는 SQL 안티 패턴입니다. http://www.amazon.com/s/ref=nb_sb_ss_i_1_5?url=search-alias%3Dstripbooks&field-keywords=sql+antipatterns&sprefix=sql+a 참조

    ID는 SQL 안티 패턴입니다. http://www.amazon.com/s/ref=nb_sb_ss_i_1_5?url=search-alias%3Dstripbooks&field-keywords=sql+antipatterns&sprefix=sql+a 참조

    당신이보고 훨씬 더 어렵게 만들고있는 ID로 당신은 ID와 많은 테이블이있는 경우. 그것은 의미를 모호하게하고 보고서 자체에 차별화하는 별칭을 사용할 필요뿐만 아니라 읽기 복잡한 쿼리 어렵게 만든다.

    사람이 자연 그들이 사용할 수있는 데이터베이스에 조인을 사용하는 어리석은 충분한 경우 또한, 당신은 잘못된 기록에 가입됩니다.

    일부 DBS 허용하는 사용 구문을 사용하려는 경우, 당신은 당신이 ID를 사용할 수없는 경우.

    당신이 ID를 사용하는 경우 잘못된 당신이이 조인 구문을 복사 할 일이면 가입으로 쉽게 끝낼 수 있습니다 (! 아무도이 작업을 수행 없다는 것을 말하지 않는다)과 조인 조건에 별칭을 변경하는 것을 잊지.

    지금이 그래서

    select t1.field1, t2.field2, t3.field3
    from table1 t1 
    join table2 t2 on t1.id = t2.table1id
    join table3 t3 on t1.id = t3.table2id
    

    당신은 의미 때

    select t1.field1, t2.field2, t3.field3 
    from table1 t1 
    join table2 t2 on t1.id = t2.table1id
    join table3 t3 on t2.id = t3.table2id
    

    당신이 id 필드로 tablenameID를 사용하는 경우, 우발적 인 실수로 이런 종류의 일이 훨씬 덜하고 찾을 훨씬 쉽습니다.

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

    2.난 항상 외부 키의 id 컬럼에 대한 TABLENAME + ID 다음 TABLENAME + ID에 ID를 선호. 그런 식으로 모든 테이블은 id 필드의 같은 이름을 가지고 중복 설명은 없다. 모든 테이블이 동일한 기본 키 필드 이름을 가지고 있기 때문에 이것은 나에게 간단 보인다.

    난 항상 외부 키의 id 컬럼에 대한 TABLENAME + ID 다음 TABLENAME + ID에 ID를 선호. 그런 식으로 모든 테이블은 id 필드의 같은 이름을 가지고 중복 설명은 없다. 모든 테이블이 동일한 기본 키 필드 이름을 가지고 있기 때문에 이것은 나에게 간단 보인다.

    지금까지 ID 필드가있는 테이블에, 내 의견으로는 쿼리가이 상황을 처리하기 위해 작성해야 속한 알고있는 테이블을 조인하고하지. 내가 일하는 곳, 우리는 항상 우리가 테이블 / 테이블 별칭 성명에서 사용하는 필드를 prefece.

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

    3.프로그래머는 후반의 내 회사에서 바로이 일에 대한 괴상한 싸움이었다. LINQ의 출현은 중복 TABLENAME의 +의 ID 패턴이 더욱 분명 바보 내 눈에했다. 나는 대부분의 합리적인 사람들이 경우 차별화 FKS에 테이블 이름을 지정해야 것과 같은 방식으로 SQL을 작성하는 손 다음은 입력에뿐만 아니라 저축 있다고 말할 것이다 생각하지만, 그냥 사용하도록 SQL에 선명도를 추가 당신이 명확하게 PK이며, FK 어느 것이 어느 볼 수있는 ID입니다.

    프로그래머는 후반의 내 회사에서 바로이 일에 대한 괴상한 싸움이었다. LINQ의 출현은 중복 TABLENAME의 +의 ID 패턴이 더욱 분명 바보 내 눈에했다. 나는 대부분의 합리적인 사람들이 경우 차별화 FKS에 테이블 이름을 지정해야 것과 같은 방식으로 SQL을 작성하는 손 다음은 입력에뿐만 아니라 저축 있다고 말할 것이다 생각하지만, 그냥 사용하도록 SQL에 선명도를 추가 당신이 명확하게 PK이며, FK 어느 것이 어느 볼 수있는 ID입니다.

    EG

    종업원 전자 FROM     왼쪽은 고객을 가입 C ON e.ID = c.EmployeeID

    나뿐만 아니라 두 가지가 연결되어있다는 알 수 있지만, PK이며, FK하는이다. 이전 스타일 반면에 당신도 모습을 강요하거나 잘 선정됐다 희망하고 있습니다.

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

    4.우리는 InvoiceID가 아닌 ID를 사용합니다. 이 쿼리를 더 쉽게 읽을 - 당신이 ID를 볼 때 혼자 특히 때 테이블 별칭 난에, 아무 의미 할 수있다.

    우리는 InvoiceID가 아닌 ID를 사용합니다. 이 쿼리를 더 쉽게 읽을 - 당신이 ID를 볼 때 혼자 특히 때 테이블 별칭 난에, 아무 의미 할 수있다.

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

    5.나는 케빈에 동의하고 테이블의 PK가 간단해야한다고 여기 몇 가지 다른 사람들 이드 및 외래 키는 다른 테이블 + 아이디를 나열합니다.

    나는 케빈에 동의하고 테이블의 PK가 간단해야한다고 여기 몇 가지 다른 사람들 이드 및 외래 키는 다른 테이블 + 아이디를 나열합니다.

    그러나 최근이 인수에 무게를 더 준 이유 중 하나를 추가하고 싶습니다.

    내 현재 위치에서 우리는 POCO 생성을 사용하여 엔티티 프레임 워크를 사용하고 있습니다. 하여 PK는 일반적인 열 이름의 집합을 공유 테이블에 대한 검증 등으로 기본 POCO 클래스의 상속을 허용 아이디의 표준 이름 지정 규칙을 사용하여. 이러한 각 테이블의 PK로 TABLENAME + ID를 사용하는 것은 다음에 대한 기본 클래스를 사용할 수있는 기능을 파괴한다.

    생각에 그냥 몇 가지 음식.

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

    6.내 취향은 외래 키에 대한 기본 키 및 TableNameID에 대한 ID입니다. 또한 같은 난 항목의 사용자 식별자를 판독 (즉, 이름 :-)) 가장 길게 테이블 칼럼 "이름"을 가지고있다. 이 구조는 내가 같은 방식으로, 대량의 테이블을 처리 할 수있는 응용 프로그램 자체에 큰 유연성을 제공합니다. 이것은 매우 강력한 것입니다. 일반적으로 객체 지향 소프트웨어는 데이터베이스를 기반으로 구축되지만, DB 자체를 허용하지 않기 때문에 OO 도구 집합을 적용 할 수 없습니다. 열 ID와 이름을 갖는 것은 여전히 ​​아주 좋은 것은 아니지만,이 단계입니다.

    내 취향은 외래 키에 대한 기본 키 및 TableNameID에 대한 ID입니다. 또한 같은 난 항목의 사용자 식별자를 판독 (즉, 이름 :-)) 가장 길게 테이블 칼럼 "이름"을 가지고있다. 이 구조는 내가 같은 방식으로, 대량의 테이블을 처리 할 수있는 응용 프로그램 자체에 큰 유연성을 제공합니다. 이것은 매우 강력한 것입니다. 일반적으로 객체 지향 소프트웨어는 데이터베이스를 기반으로 구축되지만, DB 자체를 허용하지 않기 때문에 OO 도구 집합을 적용 할 수 없습니다. 열 ID와 이름을 갖는 것은 여전히 ​​아주 좋은 것은 아니지만,이 단계입니다.

    내가 왜 이렇게 캔트?

    Select  
        Invoices.ID 
    ,   InvoiceLines.ID 
    From
        Invoices
        Left Join InvoiceLines
            on Invoices.ID = InvoiceLines.InvoiceID
    

    내 생각에 이것은 매우 읽기 쉽고 간단하다. i와 위원장으로 변수를 명명하는 것은 일반적으로 가난한 선택입니다.

  7. ==============================

    7.그것은 정말 중요하지, 당신은 모든 명명 규칙에 simalar 문제로 실행 가능성이 높다.

    그것은 정말 중요하지, 당신은 모든 명명 규칙에 simalar 문제로 실행 가능성이 높다.

    당신이 테이블 정의에서 쿼리를 작성할 때마다 볼 필요가 없습니다 그러나 일치하는 것이 중요합니다.

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

    8.난 그냥 사용 만 "ID가"및 (외래 키에 TableNameID에 의해 참조 핵심 테이블에) 이미 2 개의 생산 문제를 직접 의한 발견했다고 장소에서 일하기 시작했다.

    난 그냥 사용 만 "ID가"및 (외래 키에 TableNameID에 의해 참조 핵심 테이블에) 이미 2 개의 생산 문제를 직접 의한 발견했다고 장소에서 일하기 시작했다.

    하나의 경우에 질의 사용 "... 여기서 OtherTable FROM (SELECT ... ID에 ID ''ID OtherTable FROM (SELECT TRANSID에서 ..."대신.

    사람이 정직하게 잘못 문을 읽을 것 곳은 전체 일관된 이름이 사용 된 경우를 발견하기 훨씬 쉽게하지 않았을 것이다 말할 수 "... 어디 OtherTable에서 (SELECT OtherTableID ...에 TRANSID?"나는 생각하지 않는다 그래서.

    코드를 리팩토링 할 때 다른 문제가 발생합니다. 당신이 반면에 임시 테이블을 사용하는 경우 이전에 쿼리는 이전 코드 읽기 "... dbo.MyFunction (t.ID) ..."그 변경이 아닌 경우 "T는"지금을 말한다 다음 핵심 테이블을 갔다 단지 잘못된 결과 - 대신 핵심 테이블의 임시 테이블은, 당신도 오류가 발생하지 않습니다.

    불필요한 오류를 생성하는 목표는 (아마 어떤 사람들은 충분한 일을하지 않아도?) 인 경우, 명명 규칙의이 종류는 중대하다. 그렇지 않으면 일관된 명명 길을 가야하는 것입니다.

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

    9.간단히하기 위해 대부분의 사람들은 테이블 ID에 열 이름을 지정합니다. 또 다른 테이블에 외래 키 참조가있는 경우, 그들은 그렇게 명시 적 inv.ID이 inv.InvoiceID에 비해 여전히 간단하다의 당신은 어쨌든 표를 앨리어싱되어, 조인 경우 (귀하의 예제를 사용하는)가 InvoiceID 전화를 명시 적으로

    간단히하기 위해 대부분의 사람들은 테이블 ID에 열 이름을 지정합니다. 또 다른 테이블에 외래 키 참조가있는 경우, 그들은 그렇게 명시 적 inv.ID이 inv.InvoiceID에 비해 여전히 간단하다의 당신은 어쨌든 표를 앨리어싱되어, 조인 경우 (귀하의 예제를 사용하는)가 InvoiceID 전화를 명시 적으로

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

    10.(이 위에 언급 된대로) FK의 PK와 테이블 ID에 대한 Table.ID 나는 개인적으로 선호합니다. 에도 (나를 쏘지 마세요) Microsoft Access에서이 문제를 권장합니다.

    (이 위에 언급 된대로) FK의 PK와 테이블 ID에 대한 Table.ID 나는 개인적으로 선호합니다. 에도 (나를 쏘지 마세요) Microsoft Access에서이 문제를 권장합니다.

    그러나, 나는 또한 그들이 ID를 포함하여 단어에서 'ID'를 포함하는 모든 열 이름을 연결하는 경향이 있기 때문에 일부 생성 도구 PK의 테이블 ID를 선호하는 사실을 알고있다!

    심지어 쿼리 디자이너는 마이크로 소프트 SQL 서버에서이 작업을 수행합니다 (당신이 만든 각 쿼리에 대해, 모든 떨어져 열 ID의 모든 테이블에 대한 불필요한 새로 만든 관계를 리핑 끝)

    따라서 테이블 ID 규칙과 그것을 내 내부 OCD의 혐오로 많은, 내가 롤있다. 의이 와서 잘하면 많은 많은 많은 응용 프로그램의 기본이 될 것입니다으로는, 데이터베이스라고 기억합시다. 그리고 모든 기술은 명확한 설명 스키마로 정규화 잘의 수혜가 예상된다.

    그것은 사람들이 TABLENAME, TableDescription 등을 사용하여 시작할 때 나는 내 라인을 그릴 마십시오 것은 말할 필요도 없다. 내 의견으로는, 규칙은 다음을 수행해야합니다 :

    [최신 정보]

    또한, 때문에 "관계의 종류"또는 역할의 중복 된 컬럼에 대한이 스레드의 일부 유효한 게시물이 있습니다. 매장은 직원 ID가있는 경우 예, 그 쪼그리고 나에게 말한다. 그래서 가끔 Store.EmployeeID_Manager 그런 짓을. 물론 그것은 조금 더 크다하지만 좋은 초원에서 사람들은 테이블 ManagerID를, 또는 무엇 직원 ID가하고있다을 찾기 위해 노력 미쳐하지 않습니다. 쿼리 인 경우 WHERE 나는 그것을 같이 간단합니다 :     스토어에서 ManagerID를 같은 SELECT EmployeeID_Manager

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

    11.공식적인 데이터 사전의 관점에서이오고, 나는 데이터 요소 invoice_ID 이름을 것입니다. 일반적으로, 데이터 요소의 이름은 데이터 사전에서 고유하고 때로는 추가 자격 조건은 예를 들어, 상황에 따라 요구 될 수 있지만 이상적으로, 전체에 같은 이름을 가질 것 EMPLOYEE_ID라는 데이터 요소는 조직도 두번 사용하고 각각 supervisor_employee_ID subordinate_employee_ID 따라서 정규화 될 수있다.

    공식적인 데이터 사전의 관점에서이오고, 나는 데이터 요소 invoice_ID 이름을 것입니다. 일반적으로, 데이터 요소의 이름은 데이터 사전에서 고유하고 때로는 추가 자격 조건은 예를 들어, 상황에 따라 요구 될 수 있지만 이상적으로, 전체에 같은 이름을 가질 것 EMPLOYEE_ID라는 데이터 요소는 조직도 두번 사용하고 각각 supervisor_employee_ID subordinate_employee_ID 따라서 정규화 될 수있다.

    분명히, 명명 규칙은 주관과 스타일의 문제입니다. 나는 유용한 출발점이 될하기 위해 ISO / IEC에게 11179 개 가이드 라인을 발견했습니다.

    DBMS에, 나는 예를 들어, (오직 하나의 행 등, 예를 들어 cofig 테이블, 상수 테이블을 포함 제외) entites의 컬렉션으로 표 참조 내 EMPLOYEE_ID이있는 테이블은 키가 인사 이름을 지정해야합니다. 그래서 곧바로 TableNameID 규칙은 나를 위해 작동하지 않습니다.

    즉이 아닌 이름 변경을 수행 전반에 걸쳐 내가 많이 발생하는 테이블을 기반으로 식별자의 이름이 동일 선호 : 나는 TableName.ID = PK TableNameID = FK 스타일은 대용량 데이터 모델을 사용하고 내가 약간 혼란을 찾을 말을 본 적이 에 나타납니다. 노트에 뭔가 전술 스타일은 외래 키의 자연 및 복합 키를 기피하면서 모든 테이블에 IDENTITY (자동 증가) 열을 추가 상점에서 사용 된 것으로 보인다. 그 상점은 데이터 모델에서 공식적인 데이터 사전도 빌드를하지 않는 경향이있다. 다시, 이것은 단순히 스타일과 개인적으로 가입하지 않은되는 하나의 문제입니다. 그래서 궁극적으로, 그것은 나를 위해 아니다.

    테이블의 이름은 그래서 예를 들어, 일에 대한 컨텍스트를 제공하는 경우 말했다 모든, 나는 가끔 열 이름에서 규정을 떨어 뜨리는 경우를 볼 수 있습니다 요소 이름 employee_last_name 간단하게 인사 테이블에 LAST_NAME 수 있습니다. 여기에 이론적 근거는 도메인이 '사람의 성과 이름'과 UNION을이 LAST_NAME 다른 테이블의 열이 아니라 다른 테이블의 외래 키로 사용할 수 있지만, 다시 ... 난 그냥 내 마음을 바꿀 수있는 것보다 더 많은 가능성이있을 것입니다이다 때때로 당신은 말할 수 없다. 그게 문제입니다 : 데이터 모델링은 부분 예술, 부분 과학이다.

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

    12.나는 당신이 당신이 일관성을뿐만은 "ID"아무것도를 사용할 수 있다고 생각합니다. 테이블 이름을 포함하는 것은 중요하다. 나는 테이블 사이에 존재하는 관계를 이해하기 쉽게 쿼리를 작성할 때 그렇게 명명 규칙과 표준을 적용 어윈 같은 모델링 도구를 사용하는 것이 좋습니다 것입니다.

    나는 당신이 당신이 일관성을뿐만은 "ID"아무것도를 사용할 수 있다고 생각합니다. 테이블 이름을 포함하는 것은 중요하다. 나는 테이블 사이에 존재하는 관계를 이해하기 쉽게 쿼리를 작성할 때 그렇게 명명 규칙과 표준을 적용 어윈 같은 모델링 도구를 사용하는 것이 좋습니다 것입니다.

    내가 첫 번째 문에 의해 말은 당신이 다른 'RECNO'같은 것을 사용할 수 있습니다 대신 ID의입니다. 그럼이 표는 invoice_recno 등의 PK있을 것입니다.

    건배, 벤

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

    13.내 투표는 테이블 ID에 대한 InvoiceID입니다. 이 외래 키로 사용하고 쿼리에서 지능형 별칭 이름을 사용할 때 나는 또한 같은 이름 지정 규칙을 사용합니다.

    내 투표는 테이블 ID에 대한 InvoiceID입니다. 이 외래 키로 사용하고 쿼리에서 지능형 별칭 이름을 사용할 때 나는 또한 같은 이름 지정 규칙을 사용합니다.

     Select Invoice.InvoiceID, Lines.InvoiceLine, Customer.OrgName
     From Invoices Invoice
     Join InvoiceLines Lines on Lines.InvoiceID = Invoice.InvoiceID
     Join Customers Customer on Customer.CustomerID = Invoice.CustomerID
    

    물론, 그것은 다른 예 이상입니다. 그러나 미소. 이것은 후세 언젠가, 당신의 걸작을 변경해야 할 것입니다 코더 형편 주니어입니다. 이 예에서이 모호함없는 추가 테이블이 쿼리에 추가됩니다, 당신은 상세 감사 수 있습니다.

  14. ==============================

    14.데이터베이스의 열 이름, 나는 "InvoiceID"를 사용하십시오.

    데이터베이스의 열 이름, 나는 "InvoiceID"를 사용하십시오.

    내가 LINQ를 통해 익명의 구조체에 필드를 복사하는 경우는 구조의 유일한 ID가 있다면, 나는 거기에 "ID를"이라는 이름을 수 있습니다.

    열이가 고유하게 편집 편집 또는 삭제에 대한 행을 식별하는 데 사용 그래서, 외국 키를 사용하지 않을 경우에, 나는 "PK를"이라는 이름을 수 있습니다.

  15. ==============================

    15.각 키 고유 한 이름을 지정하는 경우, 예를 들어, "invoices.invoice_id"대신 "invoices.id는"당신은과 걱정으로 연산자를 "사용" "자연 조인"사용할 수 있습니다. 예를 들면

    각 키 고유 한 이름을 지정하는 경우, 예를 들어, "invoices.invoice_id"대신 "invoices.id는"당신은과 걱정으로 연산자를 "사용" "자연 조인"사용할 수 있습니다. 예를 들면

    SELECT * FROM invoices NATURAL JOIN invoice_lines
    SELECT * FROM invoices JOIN invoice_lines USING (invoice_id)
    

    대신에

    SELECT * from invoices JOIN invoice_lines
        ON invoices.id = invoice_lines.invoice_id
    

    SQL은 더 자세한을하지 않고 자세한 충분하다.

  16. ==============================

    16.내가 (테이블의 ID로 사용되는 단일 열 기본 키가 경우) 자신을 위해 일관된 일을 계속하는 일은 테이블 Table_pk의 기본 키를 이름을 지정하는 것입니다. 어디서나 내가 열 PrimaryKeyTable_fk를 호출, 그 테이블의 기본 키에 대한 외부 키를 가리키는 있습니다. 그런 식으로 난 내 주문 테이블에 내 고객 테이블에서 Customer_pk과 Customer_fk이있는 경우, 내가 주문 테이블에는 고객 테이블의 항목을 참조 것을 알고 있다는 것을 알고있다.

    내가 (테이블의 ID로 사용되는 단일 열 기본 키가 경우) 자신을 위해 일관된 일을 계속하는 일은 테이블 Table_pk의 기본 키를 이름을 지정하는 것입니다. 어디서나 내가 열 PrimaryKeyTable_fk를 호출, 그 테이블의 기본 키에 대한 외부 키를 가리키는 있습니다. 그런 식으로 난 내 주문 테이블에 내 고객 테이블에서 Customer_pk과 Customer_fk이있는 경우, 내가 주문 테이블에는 고객 테이블의 항목을 참조 것을 알고 있다는 것을 알고있다.

    나에게, 이것은 내가 쉽게 읽고 생각하는 경우 특히에 대한 감각을 결합합니다.

    SELECT * 
    FROM Customer AS c
        INNER JOIN Order AS c ON c.Customer_pk = o.Customer_fk
    
  17. ==============================

    17.FWIW, (모든 새로운 프로젝트, 어, 내가 "진화"를 의미, 변경) 우리의 새로운 표준입니다 :

    FWIW, (모든 새로운 프로젝트, 어, 내가 "진화"를 의미, 변경) 우리의 새로운 표준입니다 :

    그래서, 이름 필드가있을 수 있습니다라는 테이블은, FIRST_NAME, LAST_NAME, is_alive 및 fk_company과 같이 정의 LIVING_CUSTOMERS_VW라는보기를 pk_name_id :

    SELECT first_name, last_name
    FROM CONTACT.NAMES
    WHERE (is_alive = 'True')
    

    다른 사람이 말했듯이 일치하고 불필요하게 의미를 당황하게하지 않는,하지만 그냥 계획에 대해 오랫동안 작동합니다.

  18. ==============================

    18.나는 확실히 당신이 줄 정확히 이유를 들어, ID 필드 이름에 테이블 이름을 포함에 동의합니다. 일반적으로이 내가 테이블 이름을 포함 할 수있는 유일한 필드입니다.

    나는 확실히 당신이 줄 정확히 이유를 들어, ID 필드 이름에 테이블 이름을 포함에 동의합니다. 일반적으로이 내가 테이블 이름을 포함 할 수있는 유일한 필드입니다.

  19. ==============================

    19.나는 일반 ID 이름을 싫어하지. 난 강력하게 항상 invoice_id 또는 그 변종을 사용하는 것을 선호합니다. 나는 항상 내가 필요할 때 아이디에 대해 권한 테이블 인 테이블 알고 있지만,이 혼란 나

    나는 일반 ID 이름을 싫어하지. 난 강력하게 항상 invoice_id 또는 그 변종을 사용하는 것을 선호합니다. 나는 항상 내가 필요할 때 아이디에 대해 권한 테이블 인 테이블 알고 있지만,이 혼란 나

    SELECT * from Invoice inv, InvoiceLine inv_l where 
    inv_l.InvoiceID = inv.ID 
    SELECT * from Invoice inv, InvoiceLine inv_l where 
    inv_l.ID = inv.InvoiceLineID 
    SELECT * from Invoice inv, InvoiceLine inv_l where 
    inv_l.ID = inv.InvoiceID 
    SELECT * from Invoice inv, InvoiceLine inv_l where 
    inv_l.InvoiceLineID = inv.ID 
    

    무엇보다도 가장 나쁜 것은 당신이 완전히 혼란 언급 믹스입니다. 나는 거의 항상 가장 식별자의 하나를 제외하고 foo_id이었다 데이터베이스와 작업을 했어요. 즉 총 지옥이었다.

  20. ==============================

    20.나는 도메인 이름을 선호 || '신분증'. (즉, 도메인 이름 + ID)

    나는 도메인 이름을 선호 || '신분증'. (즉, 도메인 이름 + ID)

    도메인 이름은 항상 TABLENAME와 같은 자주는 아니지만.

    모든 자체 ID의 문제는 위쪽으로 확장하지 않는다는 것입니다. 당신은 ID라는 이름의 첫 번째 열에 200 표, 각각에 대해이되면, 데이터는 모두 모두를 찾기 시작합니다. 당신은 항상 테이블 이름과 ID를받을 경우, 그 조금 도움이되지만 그렇게 많이하지.

    도메인 이름 및 ID는 외래 키뿐만 아니라 기본 키의 이름을 사용할 수 있습니다. foriegn 키가 참조하는 컬럼의 이름을 따서 명명하는 경우, 그 기억을 돕는 도움이 될 수 있습니다. 공식적으로, 키이를 참조하는 외래 키의 이름을 묶는 것은 참조 무결성 구속가 기준을 설정하기 때문에, 필요하지 않습니다. 이 쿼리와 업데이트를 읽어 올 때 그러나 그것은 대단히 편리합니다.

    때때로, 도메인 이름 || 같은 이름의 같은 테이블에서 두 개의 열이있을 것이기 때문에 'ID'는 사용할 수 없습니다. 예 : Employees.EmployeeID 및 Employees.SupervisorID. 이러한 경우에, 나는 RoleName를 사용 || 예에서와 같이 'ID'.

    가능하면 마지막으로, 나는 자연 키가 아닌 합성 키를 사용합니다. 자연 키를 사용할 수 없거나 신뢰할 수있는 경우가 있습니다 만, 자연 키가 올바른 선택입니다 상황이 많이 있습니다. 이러한 경우에, 나는 그것이 자연스럽게 것이다 이름에 자연 키 걸릴 수 있습니다. 이 이름은 종종 심지어에서, 'ID를'문자를 가지고 있지 않습니다. 예 : 아니오 "수"의 약어입니다 OrderNo.

  21. ==============================

    21.각 테이블에 대해 나는 나무 편지 속기를 선택 (예를 들면. 종업원 => EMP를)

    각 테이블에 대해 나는 나무 편지 속기를 선택 (예를 들면. 종업원 => EMP를)

    그런 식으로 숫자 일련 번호 기본 키는 nkEmp된다.

    그것은 짧은 전체 데이터베이스에서 고유 나는 한눈에 정확히 해당 속성을 알고있다.

    나는 SQL에서 같은 이름과 내가 사용하는 모든 언어 (대부분의 C #, 자바 스크립트, VB6)를 유지한다.

  22. ==============================

    22.테이블과 열 이름의 잘 생각 시스템의 Interakt 사이트의 이름 지정 규칙을 참조하십시오. 방법의 브랜드는 특정 테이블의 각 컬럼과 추가 (제품 테이블 또는 _ctg 카테고리 테이블 용 _prd) 각 테이블 접미사로 사용한다. 제품 테이블의 ID 열이 id_prd 수 있으므로 데이터베이스에 고유 한 것이다 그래서.

    테이블과 열 이름의 잘 생각 시스템의 Interakt 사이트의 이름 지정 규칙을 참조하십시오. 방법의 브랜드는 특정 테이블의 각 컬럼과 추가 (제품 테이블 또는 _ctg 카테고리 테이블 용 _prd) 각 테이블 접미사로 사용한다. 제품 테이블의 ID 열이 id_prd 수 있으므로 데이터베이스에 고유 한 것이다 그래서.

    그들은 외부 키 이해를 돕기 위해 한 걸음 더 나아가 이동 : 범주 테이블을 참조 제품 테이블의 외래 키 (이것은 (_prd 접미사)이 속하는 테이블에 분명하다 어느 테이블이 참조하도록 idctg_prd 것 범주).

    이점이 다른 테이블의 ID 열이있는 모호성 없으며, 쿼리는 열 이름에 의해 참조되는 열을 한 눈에 알 수 있다는 점이다.

  23. ==============================

    23.또한 기본 키 / 외래 키 이름 지정 규칙을 참조

    또한 기본 키 / 외래 키 이름 지정 규칙을 참조

  24. ==============================

    24.다음과 같은 명명 규칙을 사용할 수 있습니다. 그것은 그것의 결함을 가지고 있지만 그것은 당신의 특정 문제를 해결합니다.

    다음과 같은 명명 규칙을 사용할 수 있습니다. 그것은 그것의 결함을 가지고 있지만 그것은 당신의 특정 문제를 해결합니다.

    당신이 말할 수있는이 방법

    SELECT * FROM Invoice LEFT JOIN InvoiceLines ON inv_id = invl_inv_id
    
  25. from https://stackoverflow.com/questions/208580/naming-of-id-columns-in-database-tables by cc-by-sa and MIT license