데이터베이스, 테이블 및 열 명명 규칙? [닫은]

데이터베이스를 디자인 할 때마다 항상 데이터베이스에 항목의 이름을 지정하는 가장 좋은 방법이 있는지 궁금합니다. 나는 종종 나 자신에게 다음과 같은 질문을한다.

  1. 테이블 이름이 복수 여야합니까?
  2. 열 이름이 단수 여야합니까?
  3. 테이블이나 열을 접두사로 사용해야합니까?
  4. 항목 이름을 지정할 때 대소 문자를 사용해야합니까?

데이터베이스에서 항목 이름을 지정하기위한 권장 지침이 있습니까?



답변

Microsoft의 SQL Server 샘플 데이터베이스를 확인하는 것이 좋습니다.
https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks

AdventureWorks 샘플은 데이터베이스 개체 구성에 스키마 이름을 사용하는 매우 명확하고 일관된 명명 규칙을 사용합니다.

  1. 테이블의 단수 이름
  2. 단수의 단수 이름
  3. 테이블 접두사에 대한 스키마 이름 (예 : SchemeName.TableName)
  4. 파스칼 케이싱 (일명 어퍼 카멜 케이스)

답변

여기에 늦게 대답했지만 짧게 말하면 :

  1. 선호 는 복수
  2. 테이블 : * 보통 * 접두사가없는 것이 가장 좋습니다. : 아니오
  3. 테이블과 열 모두 : PascalCase.

동화:

(1) 해야 할 일. 당신은 매우 몇 가지가있다 한다 특정한 방식으로, 모든 시간을,하지만 몇 가지가있다.

  • “[singularOfTableName] ID”형식을 사용 하여 기본 키 이름을 지정하십시오 . 즉, 테이블 이름이 Customer 또는 Customers 인지 여부에 상관없이 기본 키는 CustomerID 여야합니다 .
  • 또한 외래 키 다른 테이블에서 일관되게 이름을 지정 해야합니다 . 이것을하지 않는 사람을 때리는 것이 합법적이어야합니다. 정의 된 외래 키 제약 조건이 종종 중요하지만 일관된 외래 키 이름 지정이 항상 중요하다는 것을 제출합니다.
  • 데이터베이스에는 내부 규칙이 있어야합니다 . 이후 섹션에서 매우 유연하다는 것을 알 수 있지만 데이터베이스 이름 에서는 일관성이 있어야합니다. 고객을위한 테이블이 호출되는지 여부를 고객 또는 고객 이 동일한 데이터베이스를 통해 그것을 같은 방식으로 수행하는 것이보다 중요하다. 또한 밑줄을 사용하는 방법을 결정하기 위해 동전을 뒤집을 수 있지만 동일한 방식으로 밑줄을 사용해야합니다 . 이렇게하지 않으면 자존감이 낮은 나쁜 사람입니다.

(2) 당신이해야 할 일.

  • 다른 테이블에서 동일한 종류의 데이터를 나타내는 필드의 이름은 동일 해야 합니다. 한 테이블에는 Zip이 있고 다른 테이블에는 ZipCode가 없습니다.
  • 테이블 또는 열 이름에서 단어를 구분하려면 PascalCasing을 사용하십시오. camelCasing을 사용하는 것은 본질적으로 문제가되지는 않지만 관습이 아니며 재미있을 것입니다. 잠시 후 밑줄을 다룰 것입니다. (이전과 같이 ALLCAPS를 사용할 수 없습니다. OBNOXIOUSTABLE.ANNOYING_COLUMN은 20 년 전 DB2에서는 괜찮 았지만 지금은 아닙니다.)
  • 단어를 인위적으로 줄이거 나 축약하지 마십시오. 짧고 혼란스러운 것보다 이름이 길고 명확하게하는 것이 좋습니다. 매우 짧은 이름은 더 어둡고 더 잔인한 시대의 이월입니다. Cus_AddRef. 그것은 무엇입니까? 양육권 주소 참조? 고객 추가 환불? 맞춤 주소 추천?

(3) 고려해야 할 사항.

  • 테이블에 대해 복수의 이름을 가져야한다고 생각합니다. 일부는 단수로 생각합니다. 다른 곳의 주장을 읽으십시오. 그러나 열 이름은 단수 여야합니다. 복수 테이블 이름을 사용하더라도 다른 테이블의 조합을 나타내는 테이블은 단수 일 수 있습니다. 예를 들어, PromotionsItems 테이블 이있는 경우 프로모션 의 일부인 항목을 나타내는 테이블은 Promotions_Items 일 수 있지만 합법적으로 내가 생각하는 Promotion_Items 일 수도 있습니다 (일대 다 관계 반영).
  • 일관되고 특정 목적으로 밑줄을 사용하십시오. PascalCasing을 사용하면 일반적인 테이블 이름 만 충분히 명확해야합니다. 단어를 구분하기 위해 밑줄이 필요하지 않습니다. 밑줄을 (a) 연관 테이블을 나타내거나 (b) 접두사로 저장하십시오. 다음 글 머리 기호에서 다룰 것입니다.
  • 접두사는 좋지 않습니다. 그것은 일반적으로 가장하지 않습니다. 첫 번째 db 또는 두 번째 테이블에서는 일반적인 주제별 테이블 그룹화에 접두사를 사용하지 않는 것이 좋습니다. 테이블은 범주를 쉽게 맞추지 못하기 때문에 실제로 테이블을 찾기가 더 어려워 질 수 있습니다. 경험이 있으면 해보다 더 좋은 접두사 체계를 계획하고 적용 할 수 있습니다. 데이터 테이블이 tbl으로 시작한 구성 테이블, ctbl이있는 구성 테이블 , vew가있는 뷰 , proc의 sp 및 udf의 fn이 있는 DB에서 한 번 작업했습니다., 및 기타 몇 명; 그것은 꼼꼼하고 일관되게 적용되어 정상적으로 작동했습니다. 접두사를 필요로하는 유일한 이유는 어떤 이유로 같은 db에 상주하는 별도의 솔루션을 가지고있을 때입니다. 접두사를 붙이면 테이블을 그룹화하는 데 매우 도움이 될 수 있습니다. 접두사는 또한 임시 테이블과 같이 특별한 상황에 적합합니다.
  • 열 접두사를 사용하는 경우는 거의 없습니다.

답변

우리는 의견을 가지고 무게를 측정하기 때문에 :

테이블 이름은 복수 여야한다고 생각합니다. 테이블은 엔터티의 모음 (테이블)입니다. 각 행은 단일 엔터티를 나타내고 테이블은 컬렉션을 나타냅니다. 그래서 나는 Person 엔티티 People (또는 Person, 당신의 공상을 취하는 모든 것)의 테이블이라고 부를 것입니다.

쿼리에서 단 하나의 “엔티티 이름”을보고 싶은 사람들에게는 이것이 테이블 별칭을 사용하는 것입니다.

SELECT person.Name
FROM People person

LINQ의 “사람의 사람에서 사람을 선택하십시오. 이름”과 비슷합니다.

2, 3 및 4는 @Lars에 동의합니다.


답변

나는 3 개의 DBA와 함께 데이터베이스 지원 팀에서 일하고 있으며 고려되는 옵션은 다음과 같습니다.

  1. 모든 명명 표준은 표준이없는 것보다 낫습니다.
  2. “하나의 진정한”표준은 없으며, 우리 모두 선호합니다
  3. 표준이 이미있는 경우 사용하십시오. 다른 표준을 만들거나 기존 표준을 어지럽히 지 마십시오.

테이블에는 단수 이름을 사용합니다. 테이블 이름 앞에 시스템 이름 (또는 그 약어)이 붙습니다. 테이블을 논리적으로 그룹화하기 위해 접두사를 변경할 수 있으므로 시스템이 복잡한 경우에 유용합니다 (예 : reg_customer, reg_booking 및 regadmin_limits).

필드의 경우 필드 이름에 테이블의 접두사 / 암호 (예 : cust_address1)가 포함될 것으로 예상되며 표준 접미사 세트 (PK의 경우 _id, “code”의 경우 _cd, “name”의 경우 _nm)를 선호합니다. “, _nb”숫자 “, _dt”날짜 “).

Foriegn 키 필드의 이름은 기본 키 필드와 같아야합니다.

SELECT cust_nm, cust_add1, booking_dt
FROM reg_customer
INNER JOIN reg_booking
ON reg_customer.cust_id = reg_booking.cust_id

새 프로젝트를 개발할 때 선호하는 모든 엔티티 이름, 접두사 및 머리 글자를 작성하고이 문서를 개발자에게 제공하는 것이 좋습니다. 그런 다음 새 테이블을 만들 때 테이블과 필드를 무엇이라고 “추측”하는 대신 문서를 참조 할 수 있습니다.


답변

  1. 아니요. 테이블은 해당 엔티티가 나타내는 이름을 따라야합니다. 사람이 아니라 사람이 기록 중 하나를 나타내는 사람을 참조하는 방법입니다.
  2. 다시 같은 것. FirstName 열은 실제로 FirstNames라고해서는 안됩니다. 그것은 모두 당신이 열로 표현하고자하는 것에 달려 있습니다.
  3. 아니.
  4. 예. 명확성을 위해 사례를 작성하십시오. “FirstName”과 같은 열이 필요한 경우 케이싱을 사용하면 쉽게 읽을 수 있습니다.

확인. 그건 내 $ 0.02


답변

나는 또한 규범 적이기보다는 지침이라는 점에서 ISO / IEC 11179 스타일 명명 규칙을 선호합니다.

Wikipedia의 데이터 요소 이름을 참조하십시오 .

“테이블은 엔티티의 콜렉션이며 콜렉션 이름 지정 지침을 따르십시오. 이상적으로는 단체 이름이 사용됩니다. 예 : 인사. 복수도 올바른 것 : 직원. 올바르지 않은 이름은 Employee, tblEmployee 및 EmployeeTable입니다.”

항상 그렇듯이 규칙에는 예외가 있습니다. 예를 들어 항상 정확히 하나의 행을 가진 테이블은 구성 테이블과 같은 단일 이름으로 더 좋습니다. 일관성은 매우 중요합니다. 쇼핑에 컨벤션이 있는지 확인하고, 그렇다면 컨벤션이 있는지 확인하십시오. 마음에 들지 않으면 비즈니스 레인저가 아닌 비즈니스 사례를 변경하십시오.


답변

나는 테이블이 복수인지의 여부는 모두 개인적인 취향의 문제이며 모범 사례는 없다는 주장을 항상 듣습니다. 나는 그것이 DBA가 아닌 프로그래머로서 사실이라고 생각하지 않습니다. 내가 아는 한, “단지 테이블 이름을 가짐으로써 코드에서 합법적 인 이득을 얻는 반면”테이블이 객체 컬렉션이기 때문에 나에게 의미가 있습니다. “이외의 테이블 이름을 복수화해야하는 합법적 인 이유는 없습니다. 예를 들면 다음과 같습니다.

  1. 복수 모호성으로 인한 버그와 실수를 피합니다. 프로그래머는 철자 전문 지식으로 정확하게 알려져 있지 않으며 일부 단어를 혼동하는 것은 혼란스러워합니다. 예를 들어, 복수 단어는 ‘es’또는 ‘s’로 끝나는가? 사람입니까, 사람입니까? 대규모 팀이있는 프로젝트에서 작업 할 때 문제가 될 수 있습니다. 예를 들어 팀 구성원이 잘못된 방법을 사용하여 자신이 만든 테이블을 복수화하는 인스턴스입니다. 이 테이블과 상호 작용할 때 액세스 할 수 없거나 수정하는 데 너무 오래 걸리는 코드에서 사용됩니다. 결과적으로 테이블을 사용할 때마다 철자를 잘못 입력해야합니다. 이것과 매우 비슷한 것이 나에게 일어났다. 모든 팀원이 정확하고 일관되게 쉽고 정확하게 사용할 수 있도록 오류없이 테이블 이름을 수정하거나 항상 테이블 이름을 찾아야하는 것이 좋습니다. 단일 버전은 팀 환경에서 처리하기가 훨씬 쉽습니다.

  2. 단일 이름의 테이블 이름을 사용하고 기본 키에 테이블 이름을 접두어로 사용하면 기본 키에서 테이블 이름을 쉽게 결정하거나 그 반대로 코드만으로도 이점을 얻을 수 있습니다. 테이블 이름이 포함 된 변수를 부여하고 끝에 “Id”를 연결하면 추가 쿼리를 수행 할 필요없이 코드를 통해 테이블의 기본 키를 갖게됩니다. 또는 기본 키 끝에서 “Id”를 잘라내어 코드를 통해 테이블 ​​이름을 결정할 수 있습니다. 기본 키에 테이블 이름없이 “id”를 사용하면 코드를 통해 기본 키에서 테이블 이름을 결정할 수 없습니다. 또한 테이블 이름과 테이블 이름으로 PK 열 접두어를 복수화하는 대부분의 사람들은 PK에서 테이블 이름의 단일 버전 (예 : statuses 및 status_id)을 사용합니다.

  3. 테이블 이름을 단수로 만들면 표 이름을 나타내는 클래스 이름과 일치시킬 수 있습니다. 다시 한 번, 이것은 코드를 단순화하고 테이블 이름 만 있으면 클래스를 인스턴스화하는 것과 같이 정말 깔끔한 작업을 수행 할 수 있습니다. 또한 코드를보다 일관성있게 만들어서 …

  4. 테이블 이름을 단수로 만들면 이름 지정 체계가 일관되고 체계적이며 모든 위치에서 유지 관리하기가 쉽습니다. 코드의 모든 인스턴스에서 열 이름, 클래스 이름 또는 테이블 이름에 관계없이 동일한 이름과 동일하다는 것을 알고 있습니다. 이를 통해 전역 검색을 수행하여 해당 데이터가 사용되는 모든 곳을 볼 수 있습니다. 테이블 이름을 복수화하면 해당 테이블 이름의 단일 버전 (기본 키에서 해당 클래스)이 사용되는 경우가 있습니다. 데이터가 복수이고 일부는 단수 인 경우가없는 것이 합리적입니다.

요약하면, 테이블 이름을 복수화하면 코드를 더 똑똑하고 다루기 쉽게 만드는 데있어 모든 이점을 잃게됩니다. 테이블 이름을 피할 수있는 오브젝트 또는 로컬 코드 이름으로 변환하기 위해 찾아보기 테이블 / 배열이 필요한 경우도 있습니다. 단수 테이블 이름은 처음에는 약간 이상하다고 생각되지만 복수 이름에 비해 상당한 이점을 제공하며 모범 사례라고 생각합니다.