열 이름 명명 규칙 및 모범 사례


19

열 이름 지정과 관련하여 모범 사례에 대한 전문가 의견이 필요 합니다.

배경은 Wikipedia 에 따르면 다음과 같은 구문입니다.

SELECT ... FROM Employees JOIN Timesheets USING (EmployeeID);

보다 효율적이다

SELECT ... FROM Employees JOIN Timesheets ON (Employees.EmployeeID = Timesheets.EmployeeID);

그러나 모든 기본 키 열의JOIN ... USING 구문 작업 에는 전역 적으로 고유 한 이름 만 있습니다. 따라서 이것이 올바른 일로 간주되는지 궁금합니다.

개인적으로 나는 항상 PK column id과 foreign key column을 사용하여 테이블을 만들었습니다 othertable_id. 그러나 그렇게하면 USING또는 을 사용할 수 없습니다 NATURAL JOIN.

테이블 디자인에 대한 디자인 스타일 또는 모범 사례 가이드에 대한 링크도 높이 평가할 것입니다!


3
위키 백과가 잘못되었습니다. 첫 번째 버전은 두 번째 버전보다 더 효율적이지 않습니다. 후드 아래에서 데이터베이스는
절대

답변:


13

이것은 전에 SO에 요청되었습니다.

일반적이고 모호한 이름이있는 경우 테이블 이름을 접두사로 사용하십시오. 즉, 거의 모든 쿼리에서 별칭을 지정해야하는 것은 무엇이든 가능합니다.

직원 테이블의 경우

EmployeeID
EmployeeName
Comment
Salary
StartDate
EndDate
InsertedDateTime
...

그리고 Wikipedia는 실제로 다음과 같이 말합니다.

그러나 USING 구문은 단순한 구문 설탕 그 이상입니다. 결과 집합이 명시 적 술어가있는 버전의 결과 집합과 다르기 때문입니다. 특히 USING 목록에 언급 된 모든 열은 조인의 각 테이블에 대해 한 번이 아니라 규정되지 않은 이름으로 한 번만 나타납니다.

그것은 하나의 열이 적습니다. 당신은 SELECT *어쨌든 결코 사용하지 않을 것이므로 요점은 무섭습니다 ...


나는 SO를 찾는 것을 생각하지 못했습니다. 특히 좋은 SO 질문에 대한 링크가 있습니까? 어쨌든 고마워, 나는 "고유 한 ID"라는 이름을 붙일 것이다!
Kerrek SB

@ Kerrk SB : 실제로, 나는하지 않았습니다. 나는 각각이 빠르게 응답하거나 닫히기 때문에 무시하는 경향이 있습니다 :-) 죄송합니다
gbn

누군가가 링크를 파낼 수 있다면 비슷한 질문을하고 싶습니다. 나는 거기에서 질문을 찾을 수 없었기 때문에 여기에 왔으며, 이미 질문을 받았다고 확신했다. 나는 즉시이 질문을 발견했다.
Nicholas Shanks

프로그래머들에게있었습니다. 당신을위한 멋진 큰 롤빵 싸움 ... programmers.stackexchange.com/questions/114728/…
gbn

6

다음 책은 ID를 SQL 반 패턴으로 사용하는 것에 대해 이야기하고 저자와 인사합니다. http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557/ref=sr_1_1?s=books&ie=UTF8&qid=1330025134&sr=1-1

이는 복잡한보고를 수행 할 때 별명을 지정해야하므로 둘 이상의 ID가 필요한 경우에 특히 문제가됩니다. 또한 tablename ID를 사용하면 동일한 이름을 가진 올바른 FK를 조인하기가 더 쉬워지고 잘못된 것으로의 조인으로 인한 오류가 줄어 듭니다.

즉, 많은 데이터베이스는 USING 구문을 지원하지 않으므로 이러한 데이터베이스에 대해 문제가되지 않는 문제가 발생합니다. 테이블 구조가 변경되는 경우 따라서 modifieddate라는 필드를 두 테이블에 추가한다고 가정하면 조인을 원하지 않지만 자연 조인은 그렇게합니다.


4

조인이 존재하는 표현식을 사용하여 Employees.EmployeeID와 같은 테이블 이름과 열 이름을 명시 적으로 제공하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.