2009-07-07 2 views
1

다른 명명 규칙에 대한 토론이 있지만 모든 일반 지침 이었지만 다른 특정 사례에 대해서는 좋은 연습에 대한 조언을 구하는 것이 좋습니다. 그러나 내 사건을 직접 다루는 또 다른 질문이 있으면 그것을 링크하십시오.이 질문을 기꺼이 삭제할 것입니다.열 이름 지정 조언

모델, 유닛, 브랜드, 제조업체 등의 테이블이 포함 된 전자 장치를 모델링하기위한 데이터베이스가 있습니다. 해당 엔터티의 인스턴스의 실제 텍스트 이름을 나타내는 항목을 무엇이라고 부를지 궁금합니다. 브랜드의 경우 "Canon"또는 "HP"와 같습니다. 분명히, 저는 처음에 행한 "이름"이라는 열을 단순히 호출하는 관례를 채택 할 수있었습니다. 그러나 다음 선택하는 동안, 당신은 "이름이"선택된 열에서 고유하지 않기 때문에 열을 얻을 수있는 테이블 이름을 참조하도록 강요 : 괜찮습니다,하지만 난 MobilePhoneFormFactor 테이블에 도착했고

SELECT Model.name, Brand.name, FROM Model, Brand 

Year 테이블. 특정 연도의 누적 데이터를 저장하는 후자. 나는이 테이블과 같은 규칙을 사용하여 자신을 강제로, 내가 얻을 :

SELECT Model.name, Brand.name, Year.name, MobilePhoneFormFactor.name FROM Model, Brand, MobilePhoneFormFactor, Year 

조금 이상한은 "Year.name"로 대신 단지 년 가리키는 것으로 보인다 "해." 이 사건을 예외로 만들 수는 있지만, 방금 전에 저지른 명명 규칙을 이미 깨고 있습니다. 그래서 나는이 다른 명명 규칙을 고려 : 여기

SELECT model, brand, formFactor, year FROM Model, Brand, MobilePhoneFormFactor, Year 

브랜드 테이블 브랜드의 텍스트 이름 인 "브랜드"열이, 모델 테이블이의 텍스트 이름 인 "모델"열이있다 model ... 등등.이 select 문에서 볼 수 있듯이이 접근법을 사용하면 대부분의 경우 열의 테이블 이름 접두사를 편리하게 삭제할 수 있습니다 (테이블 이름을 유지하면 다소 ""이됩니다).

하지만 각 테이블에 대해 설명 필드를 갖고 싶다면 어떻게해야합니까? 명백한 구현은 Brand.desc, Year.desc입니다. 이름에 대한 원래의 방식과 같습니다. 따라서 일부 상황에서는 조금 이상하지만 Brand.name, Year.name 체계로 돌아가는 것이 가장 안전하고 일관성이 있다고 생각합니다.

세 번째 옵션은 "brandName, modelName"등의 열 이름을 지정하는 것이지만 단순히 "name"을 사용하고 "Brand.name, Model.name"이 포함 된 쿼리에서 항상 테이블 이름을 참조 할 수도 있습니다. 케이스.

제 생각에는 무엇이 가장 좋을까요? 나는 데이터베이스 베테랑이 아니므로 길 아래로 어떤 것들이 나를 뒤돌아 보게 될지 궁금해한다. "Brand.name, Year.name으로 간다면 훨씬 더 직관적이었을 것이다." 예.

참고 : 끝내기 위해 관계없이 텍스트 이름 열 (자연어 키)이 unqiue 제약 조건을 가진 대체 키로 사용됩니다. 기본 키에 IDENTITY 열을 사용하고 있습니다.

+2

"BrandName", "ModelName"등 ... 다음 연도를 1 년으로 지정할 수 있습니다. – DevinB

+0

원래이 질문에 대한 답변을했지만 문제가 많아서 삭제했습니다. 나는 당신과 다른 사람이 그것을 언급했기 때문에 그것을 거기에 다시 던졌습니다. – JoeCool

+0

나는 Year 테이블을 이해하지 못한다. 그 테이블에는 더 좋은 이름이 있어야합니다. – jmucchiello

답변

4

name으로 가고 싶습니다. 나는 Year.name이 조금 이상하지만, IMAO는 항상이 열이 무엇인지를 기억하고 아무것도 기억할 필요가 없다는 것에 동의하지 않습니다.우리는 옵션을 탐험하는 동안

는하지만, 어떤 사람들은 등 Model.ModelName, Brand.BrandName,

처럼 나는, 물론, 그들이 미쳤다고 생각 하는가 싶다.

+0

미친 평가 일에 동의합니다. 나는 사람들이 생성 한 테이블 중 일부와 함께 작업했습니다. 그들은 엄청나게 부풀어 오르고 실망 스럽습니다. –

+0

"Pro SQL Server 2008"의 Louis Davidson은 대리 키 열에 테이블 이름 + "ID"를 사용하지만이 테이블 이름은 종종 마이그레이션되고 외부 테이블에있을 때도 원래 이름을 유지하는 데 도움이되므로 동의합니다. 그냥 내가 그걸 메모 할 줄 알았다. – JoeCool

+1

그래, 난 table_name + "ID"상관 없어. 또한 DBMS에서 지원되는 경우 JOIN USING (tableID)을 수행 할 수 있기 때문에 유용합니다. – chaos

1

나는 일반적으로 별명과 같은 쿼리 내 테이블 :

SELECT b.Name, m.Name, mpff.Name 
FROM Brands b, Manufacturers m, MobilePhoneFormFactor f etc... 

그러나 나는 MobilePhoneFormFactor는 이름이 너무 긴 생각; FormFactor라고 부릅니다.

+0

이 규칙을 사용하면 Year.name에도이 규칙을 고수 할 것인가 아니면 "Year.year"와 같이 "year"열을 호출하는 규칙을 위반합니까? Year.name은 규정 된 규칙을 따르지만 나에게 비현실적인 것은 아닙니다 – JoeCool

+1

특정 사례를 더 검토해야합니다.하지만 올해는 일종의 상수가 아니라 자체적 인 테이블이어야한다고 말하고 싶습니다. . –

+0

우리는 특정 브랜드 또는 장치와 관련이없는 누적 데이터 (누적되지 않았 음)를 저장하기 위해 연도 표를 사용합니다. – JoeCool

1

일반적으로 이름 충돌 여부에 관계없이 테이블에 대해 가장 명확한 열 이름을 사용합니다. 그렇게 할 때 select 문에서 열 이름 앞에 명시 적으로 테이블 이름을 지정해야합니다.

같은 : 나는 닐 N에 동의

SELECT Model.name, Brand.Name, mff.Name from Model, Brand, MobileFormFactor as mff... 
1

, 당신이 멀티 테이블 모호성을 제거하기 위해 가입하고있는 경우 어떤 경우에 테이블 이름이나 별칭을 사용하는 것이 좋습니다. 이 름에 이름을 붙여 이름을 지정하고 다중 테이블 조인을 수행 할 때 테이블의 별명을 지정하고 별명을 사용하십시오.

테이블 이름은 가능한 한 모호하지 않아야합니다. 더 짧은 이름이 이상적이지만, 모호성을 줄이기 위해 긴 이름이 필요하면 긴 이름을 사용하십시오.

2

이것은 옳고 그른 대답은 없지만 모든 사람은 자신의 견해와 명명 규칙을 가지고있는 것과 같은 회색 주제입니다.

몇 가지 일반적인 규칙.

  1. 일관성있게 유지하십시오.

  2. 열에 테이블 이름을 반복하지 마십시오.

  3. SQL Server 키 또는 예약어를 피하십시오.

  4. 설명. 자신이나 다른 사람이 이름을 기반으로 열에 저장된 데이터를 정확하게 말할 수없는 경우 올바르게 이름이 지정되지 않습니다.

2

내가 일을 반복 좋아하지 않는다, 그러므로 나는 Product.ProductName을 사용하지 것이다 (너무, Product.ProductId를 사용하지 마십시오).

테이블과 마찬가지로 열 이름을 지정하면 나에게 결함이있는 것으로 보입니다. - Product.Product?!? 테이블의 행이 제품을 나타내면 제품을 어떻게 단일 열로 표현할 수 있습니까? 그래서 저는 Product.Name을 절대적으로 제안합니다.

테이블의 경우 Year 나는 이름이 잘 선정되지 않았다고 말하는 경향이 있습니다. 1 년에 대한 정보는 저장하지 않지만 누적 간격과 같은 것입니다. 어쩌면 ReportingInterval이라고 부르면 열 Year을 호출해도 문제가 없습니다. 그리고 이것이 명명 규칙을 위반하지 않는다고 생각합니다. 단지 Name과 같은 열 이름입니다. 모든 테이블의 이름이 같은 키 열이 실제로 필요한 경우 모든 테이블의 공통 특성을 설명하지 않고 특정 기능이있는 열을 원하기 때문에 결과적으로 이름을 NaturalKey으로 지정해야합니다. D

+0

내 OOP 배경으로 인해, 나는 단수의 테이블 이름을 좋아한다. 그래서 나는 당신이 나에게서 그것을 가져갈 수 있다고 생각하지 않는다. – JoeCool

+0

(나는 생각한다) Singular는 테이블의 행을 나타내는 클래스에 적합하지만, 행 모음이 아닙니다. 제품에서 * 선택 *!? 안돼! SELECT * FROM Products ... –

0

나는 가능한 한 가장 간단한 방식을 고수 것이다 : 그런데

은 테이블 이름 해야는 ... 복수로 할 수. 모든 계획은 잠시 중단되며 이름이나 ID 이외의 것을 무엇이나 왜 사용했는지 기억하기가 어려워집니다.

필자는 항상 내 테이블의 별칭을 지정하고 열을 선택할 때 이러한 별칭을 사용합니다. 내 별칭 규칙 (그리고이 스키마에도 한계가 있음)은 테이블 이름의 각 단어에서 첫 번째 이니셜입니다. 그래서

SELECT m.name, b.name, FROM Model AS m, Brand AS b ... 

SELECT m.name, b.name, y.name, mpff.name FROM Model AS m, Brand AS b, MobilePhoneFormFactor AS mpff, Year AS y ... 

이 간단하고 기억에 남는 명명 스키마를 유지하고 또한 SQL 더 읽기 이럴한다. 또한 WHERE 절에서 테이블 조인과 필터링 조를 구별하기 위해 명시적인 JOIN 문을 사용합니다. 그러나 이것은 아마도 질문의 범위를 벗어납니다.

+0

나는 똑같은 짓을 했어. 문제는보기를 작성하려는 경우에 발생합니다. "name"이라는 이름의 칼럼에 다른 이름을 부여해야합니다. 초기 양식을 다시 시작하고 Craig HB의 솔루션을 적용하고 싶습니다. –

1

는 항상 사용

SELECT ModelName, BrandName, FROM Model, Brand 

당신이

SELECT Model.name, Brand.name, FROM Model, Brand 

를 사용하는 경우이

처럼 뷰의 테이블을 조인 할 때 다음 각 열에에게 별칭을 부여해야합니다
SELECT Model.name AS ModelName, Brand.name AS BrandName, FROM Model, Brand 

ModelID, ModelName, ModelDescription과 같은 필드를 사용하는 경우에는 언제 테이블에 가입하십시오. 특히 별칭 (사용해야 함)을 사용한 다음 Model.ModelName 대신 m.ModelName을 사용하는 경우 특히 그렇습니다.