ProgramingTip

데이터베이스, 테이블 및 열 명명 규칙?

bestdevel 2020. 9. 29. 08:14
반응형

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


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

  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) 할 사항.

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

좋아요, 우리는 의견을 주시하고 있기 때문에 :

테이블 이름은 복수 투표 생각합니다. 테이블은 엔터티의 모음 (테이블)입니다. 각 행은 단일 한 단일 한 테이블은 컬렉션을 나타냅니다. 그래서 저는 Person 엔터티의 테이블을 People (또는 Persons, 당신이 원하는대로)이라고 부를 것입니다.

쿼리에서 단일 "엔티티 이름"을보고 싶은 사용자를 위해 테이블 ​​별칭을 사용합니다.

SELECT person.Name
FROM People person

LINQ의 "from person in people select person.Name"과 사건이 발생합니다.

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


저는 세 명의 DBA가있는 데이터베이스 지원 팀에서 일하고 있고 고려할 옵션은 다음과 같습니다.

  1. 모든 명명 표준이 표준이없는 것보다 낫습니다.
  2. "하나의 진정한"표준은 없습니다. 우리 모두가 선호하는 것이 있습니다.
  3. 이미 표준이있는 경우를 사용하십시오. 다른 표준을 만들거나 기존 표준을 혼동하지 않습니다.

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

필드의 경우 필드 이름에 테이블의 접두사 / acryonm (예 : cust_address1)이 코드가 예상하고 표준 접미사 집합 (PK의 경우 _id, "이름"의 경우 _cd, "", ")을 선호합니다.", " 숫자 "는 _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의 데이터 요소 이름을

참조하십시오 .

"테이블은 다음 컬렉션이며 컬렉션 이름이 지정됩니다. 이상적으로는 집합 이름이 사용됩니다. 예 : Personnel. 복수도 맞습니다 : Employees. 잘못된 이름에는 Employee, tblEmployee EmployeeTable이 포함됩니다."

항상 그렇듯이 규칙에는 예외가 있습니다. 예를 들어 항상 정확히 하나의 행이있는 테이블은 구성 테이블과 같은 단일 이름을 사용하는 것이 더 좋습니다. 그리고 일관성이 가장 중요합니다. 쇼핑에 있는지 확인하고 있는지 확인합니다. 만약 당신이 그것을 좋아하지, 혼자서 레인저가하는 것이 아니라 그것을 바꾸도록 비즈니스 케이스를하십시오.


우리의 선호 :

  1. 테이블 이름은 복수 집에?
    못. 컬렉션이라는 인수는 의미가 없을 것입니다. 복수 규칙은 이름 지정을 복잡하게 만듭니다. 집 1 개, 집 2 개, 쥐 대 쥐, 사람 대 사람, 그리고 우리는 다른 언어도 가능성이 있습니다.

    Update person set property = 'value'테이블의 각 사람에게 작용합니다.
    Select * from person where person.name = 'Greg'사람 행의 컬렉션 / 행 집합을 반환합니다.

  2. 열 이름은 단 수집에?
    일반적으로 예, 정규화 규칙을 위반하는 경우 예외입니다.

  3. 접두사를 접두사에 접어 놓으시겠습니까?
    대부분의 플랫폼 환경 설정입니다. 열 앞에 이름을 붙이는 것을 선호합니다. 테이블 접두사를 사용하지 않지만 뷰 (v_)와 stored_procedures (sp_ 또는 f_ (함수))를 접두사로 사용합니다. 이것은 실제로 뷰에서 계산 된 필드 인 v_person.age를 업데이트하려는 사람들에게 도움이됩니다 (어떻게 업데이트 할 수 없음).

    또한 키워드 충돌을 피할 수있는 좋은 방법입니다 (delivery.from breaks, delivery_from은라는).

    코드를 더 장황하게 만들지 만 가독성에 도움이되는 경우가.

    bob = new person()
    bob.person_name = 'Bob'
    bob.person_dob = '1958-12-21'
    ... 매우 읽기 명시 적입니다. 그러나 이것은 손에서 수 있습니다.

    customer.customer_customer_type_id

    customer와 customer_type 테이블 상관 관계를 그런 customer_type 테이블 (customer_type_id)의 기본 키를 지나며 쿼리를 수행하는 동안 'customer_customer_type_id'가 표시되면 해당 위치 (고객 테이블)를 즉시 알 수 있습니다.

    또는 customer_type과 customer_category 사이에 MM 관계가있는 경우 (특정 특정 유형의 특정 만 사용할 수 있음)

    customer_category_customer_type_id

    ... 긴쪽에 약간 (!)입니다.

  4. 항목 이름을 때 대소 문자를 사용합니까? 예-소문자 :), 밑줄 포함. 어느 쪽이든 신뢰할 수있는 플랫폼입니다. 위의 3과 함께도 의미가 있습니다.

    하지만 대부분은 선호 사항입니다. -일관성이있는 한 그것을 읽어야하는 모든 사람이 예측할 수 있어야합니다.


나는 테이블이 복수형인지 아닌지가 모두 개인 취향의 문제이며 모범 사례가 주장을 항상 듣습니다. 나는 그것이 사실이라고 믿지 않는다. 특히 DBA가 아닌 프로그래머로서 그렇다. 내가 아는 한, 테이블 이름을 복수화 할 수있는 이유는 "객체의 모음이기 때문에 나에게 이해가 간다"는 것 외에는 단수 테이블 이름을 사용하여 코드에서 합법적 인 이득을 얻을 수 있습니다. 예를 들면 :

  1. 복수의 모호성으로 인한 버그와 실수를 방지합니다. 프로그래머는 철자 전문 지식으로 정확히 거기에 어떤 단어를 복수화하는 것이 혼란 스럽습니다. 예를 들어 복수 단어가 'es'로 끝나나요 아니면 's'로 끝나나요? 사람입니까, 사람입니까? 관리 팀이있는 프로젝트에서 작업 할 때이 문제가있을 수 있습니다. 예를 들어, 팀 구성원이 자신이 만든 테이블을 복수화하기 위해 잘못된 방법을 사용하는 경우입니다. 이 테이블과 상호 작용할 때까지 액세스 할 수있는 것은 수정하는 데 오랜 시간이 코드 전체에서 사용됩니다. 결과적으로 테이블을 사용할 때마다 철해야 잘못 입력해야한다는 것을 기억합니다. 이와 매우 유사한 일이 저에게 있습니다. 팀의 모든 구성원이 사용하고 일관되게 사용할 수 있습니다. 단일 버전은 팀 환경에서 훨씬 더 쉽게 처리 할 수 ​​있습니다.

  2. 단일 버전의 테이블 이름을 사용하고 기본 키에 테이블 이름을 접두사로 붙이면 이제 코드만으로 기본 키에서 테이블 이름을 쉽게 만들 수 있고 그 반대의 경우도 마찬가지입니다. 테이블 이름이있는 변수를 제공하고 끝에 "Id"를 연결하면 추가 쿼리를 수행 할 수있는 코드를 통해 테이블의 기본 키를 사용할 수 있습니다. 또는 기본 키 끝에서 "Id"를 잘라내어 코드를 통해 테이블 ​​이름을 작성할 수 있습니다. 기본 키에 테이블 이름없이 "id"를 사용하면 코드를 통해 기본 키에서 테이블 이름을 확인할 수 없습니다. 또한 테이블 이름을 복수화하고 테이블 이름으로 PK 열을 접두사로 지정하는 대부분의 사람들은 PK에서 테이블 이름의 단수 버전 (예 : statuses 및 statusId)을 사용하여이 작업을 전혀 수행 할 수 없습니다.

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

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

요약하자면, 테이블 이름을 복수화하면 코드를 더 스마트하고 쉽게 처리 할 수있는 모든 이점을 잃게됩니다. 테이블 이름을 피할 수있는 객체 또는 로컬 코드 이름으로 변환하기 위해 조회 테이블 / 배열이 필요한 경우도있을 수 있습니다. 단수 테이블 이름은 처음에는 약간 이상하게 느끼지지만 복수에 상당한 상당한 이점을 제공하며 모범 사례라고 생각합니다.


ISO 11179-5 : 이름 지정 및 이미지를 사용합니다. http://metadata-standards.org/11179/#11179-5에서 얻을 수 있습니다.

나는 잠시 동안 블로그에 올렸다 : ISO-11179 명명 규칙


나는 게임에 늦었다는 것을 알고 있고 질문에 대한 답변은 이미 매우 잘 대한 열 이름 접두사에 # 3에 대한 의견을 제공하고 싶습니다.

모든 열은 정의 된 테이블에 고유 한 접두사로 이름을 지정해야합니다.

예를 들어 "customer"및 "address"테이블이 주어지면 각각 "cust"및 "addr"접두사를 사용합니다. "customer"에는 "cust_id", "cust_name"등이 있습니다. "address"에는 "addr_id", "addr_cust_id"(FK가 고객에게 돌아 가기), "addr_street"등이 포함됩니다.

내가이 표준을 처음 제시했을 때 나는 그것에 대해 당황했습니다. 나는 아이디어가 싫었다. 나는 그 모든 여분의 타이핑과 중복에 대한 생각을 참을 수 없었다. 이제 나는 결코 돌아갈 수없는 충분한 경험을 가지고 있습니다.

이렇게하면 데이터베이스 스키마의 모든 열이 고유합니다. 이것에 대한 한 가지 주요 이점이 있는데, 이는 그것에 반대하는 모든 주장을 능가합니다 (물론 제 생각에는) :

전체 코드베이스를 검색하고 특정 열에 닿는 모든 코드 줄을 안정적으로 찾을 수 있습니다.

# 1의 이점은 엄청나게 큽니다. 열을 더 이상 사용하지 않고 스키마에서 열을 안전하게 제거하기 전에 업데이트해야하는 파일을 정확히 알 수 있습니다. 열의 의미를 변경하고 리팩토링해야하는 코드를 정확히 알 수 있습니다. 또는 열의 데이터가 시스템의 특정 부분에서 사용되고 있는지 간단히 알 수 있습니다. 이로 인해 잠재적으로 거대한 프로젝트를 단순한 프로젝트로 전환 한 횟수 나 개발 작업에서 절약 한 시간도 셀 수 없습니다.

상대적으로 사소한 또 다른 이점은 자체 조인을 수행 할 때 테이블 별칭 만 사용하면된다는 것입니다.

SELECT cust_id, cust_name, addr_street, addr_city, addr_state
    FROM customer
        INNER JOIN address ON addr_cust_id = cust_id
    WHERE cust_name LIKE 'J%';

이것에 대한 나의 의견은 다음과 같습니다.

1) 아니요, 테이블 이름은 단수 여야합니다.

단순한 선택 ( select * from Orders)에는 의미가있는 것처럼 보이지만 OO에 해당하는 경우 ( Orders x = new Orders) 에는 덜 의미가 있습니다.

DB의 테이블은 실제로 해당 엔티티의 집합입니다. set-logic을 사용하면 더 의미가 있습니다.

select Orders.*
from Orders inner join Products
    on Orders.Key = Products.Key

조인의 실제 논리 인 마지막 줄은 복수 테이블 이름과 혼동스러워 보입니다.

나는 항상 (Matt가 제안한 것처럼) 별칭을 사용하는 것에 대해 확신하지 못합니다.

2) 하나의 속성 만 보유하므로 단수 여야합니다.

3) 열 이름이 모호한 경우 (위에서 둘 다 [Key]라는 열이있는 경우) 테이블 이름 (또는 별칭)으로 충분히 구분할 수 있습니다. 쿼리를 빠르게 입력하고 단순하게 만들고자합니다. 접두사는 불필요한 복잡성을 추가합니다.

4) 원하는 것이 무엇이든 CapitalCase를 제안합니다.

나는 이것들에 대한 절대적인 지침이 하나도 없다고 생각합니다.

당신이 선택하는 것이 응용 프로그램이나 DB 전체에서 일관되는 ​​한 실제로 중요하지 않다고 생각합니다.


제 생각에는 :

  1. 테이블 이름은 복수 여야합니다.
  2. 열 이름은 단수 여야합니다.
  3. 아니.
  4. 테이블 이름과 열 이름 모두에 대해 CamelCase (내 선호) 또는 underscore_separated 중 하나입니다.

그러나 앞서 언급했듯이 어떤 규칙도없는 것보다 낫습니다. 어떻게 선택하든 향후 수정 사항이 동일한 규칙을 따르도록 문서화하십시오.


각 질문에 대한 최선의 답변은 귀하와 귀하의 팀이 제공 할 것이라고 생각합니다. 명명 규칙이 정확히 얼마나 정확한지보다 명명 규칙을 갖는 것이 훨씬 더 중요합니다.

그에 대한 정답이 없기 때문에 시간을내어 (너무 많지는 않지만) 자신의 규칙을 선택하고- 여기 에 중요한 부분이 있습니다-그것에 충실해야합니다.

물론 그것에 대한 표준에 대한 정보를 찾는 것이 좋습니다. 그것이 당신이 요구하는 것입니다. 그러나 당신이 얻을 수있는 다양한 대답에 대해 걱정하거나 걱정하지 마십시오. 당신에게 더 좋은 것을 선택하십시오.

혹시라도 내 대답은 다음과 같습니다.

  1. 예. 테이블은 레코드 , 교사 또는 배우 의 그룹 이므로 ... 복수입니다.
  2. 예.
  3. 나는 그들을 사용하지 않습니다.
  4. 내가 더 자주 사용하는 데이터베이스 인 Firebird는 모든 것을 대문자로 유지하므로 중요하지 않습니다. 어쨌든 프로그래밍 할 때 releaseYear 와 같이 읽기 쉬운 방식으로 이름을 씁니다 .

  1. 테이블 이름은 사람이 아닌 사람을 단수로 유지하십시오.
    1. 여기도 마찬가지
    2. 아니요. 처리중인 것이 테이블 (tbl_) 또는 사용자 저장 프로 시저 (usp_)임을 나타내는 끔찍한 접두사를 보았습니다. 뒤에 데이터베이스 이름이 나옵니다 ...하지 마십시오!
    3. 예. 나는 모든 테이블 이름을 PascalCase하는 경향이 있습니다.

명명 규칙을 통해 개발 팀은 프로젝트의 핵심에서 발견 가능성과 유지 보수 가능성을 설계 할 수 있습니다.

좋은 명명 규칙은 발전하는 데 시간이 걸리지 만 일단 배치되면 팀이 공통 언어로 전진 할 수 있습니다. 좋은 명명 규칙은 프로젝트와 함께 유기적으로 성장합니다. 좋은 이름 지정 규칙은 소프트웨어 라이프 사이클의 가장 길고 가장 중요한 단계 인 프로덕션의 서비스 관리 동안 변경 사항에 쉽게 대처할 수 있습니다.

내 대답은 다음과 같습니다.

  1. . 예를 들어 일련의 거래 , 증권 또는 거래 상대방참조 할 때 테이블 이름은 복수 여야합니다 .
  2. 예.
  3. 예. SQL 테이블에는 tb_, 뷰에는 vw_, 저장 프로 시저에는 usp_, 트리거에는 tg_, 데이터베이스 이름이 붙습니다.
  4. 열 이름은 밑줄로 구분 된 소문자 여야합니다.

이름 지정은 어렵지만 모든 조직에는 이름을 지정할 수있는 사람이 있으며 모든 소프트웨어 팀에는 이름 지정 표준을 담당하고 sec_id , sec_valuesecurity_id 같은 이름 지정 문제 가 프로젝트에 적용되기 전에 조기에 해결 되도록하는 사람이 있어야합니다. .

따라서 좋은 명명 규칙과 표준의 기본 원칙은 무엇입니까?-

  • 클라이언트 및 솔루션 도메인의 언어 사용
  • 설명 적이어야합니다.
  • 일관성있게
  • 명확화, 반영 및 리팩토링
  • 모든 사람에게 명확하지 않은 경우 약어를 사용하지 마십시오.
  • SQL 예약 키워드를 열 이름으로 사용하지 마십시오.

다음은 몇 가지 선택 사항을 제공하는 링크입니다. 부분적으로 정의 된 사양에 의존하지 않고 따를 수있는 간단한 사양을 찾고있었습니다.

http://justinsomnia.org/writings/naming_conventions.html


테이블 이름은 객체 집합을 나타내므로 항상 단수 여야합니다. 무리를 지정하여 양 무리를 지정하거나 무리를 지정하면 새 무리를 지정합니다. 복수는 필요 없습니다. 테이블 이름이 두 개의 이름으로 구성되고 명명 규칙이 복수 인 경우 복수 이름이 첫 번째 단어인지 두 번째 단어인지 또는 둘 다인지 알기가 어려워집니다. 논리입니다. objects.instance가 아니라 Object.instance입니다. 또는 TableNames.column이 아니라 TableName.column입니다. Microsoft SQL은 대소 문자를 구분하지 않습니다. 대문자를 사용하는 경우 테이블 이름을 읽고 둘 이상의 이름으로 구성된 경우 테이블 또는 열 이름을 구분하는 것이 더 쉽습니다.


SELECT 
   UserID, FirstName, MiddleInitial, LastName
FROM Users
ORDER BY LastName

테이블 이름 : 단일 개체가 아닌 실제 개체를 나타내는 단일 개체이므로 단수 여야합니다.

열 이름 : 단수 여야하며 원자 값을 보유하고 정규화 이론을 확인할 것임을 전달합니다. 그러나 동일한 유형의 속성이 n 개있는 경우에는 접미사에 1, 2, ..., n 등을 붙여야합니다.

테이블 / 열 접두사 : 엄청난 주제이며 나중에 논의 할 것입니다.

케이싱 : 카멜 케이스 여야합니다.

내 친구 Patrick Karcher , 누군가에게 불쾌감을 줄 수있는 내용은 쓰지 말아주십시오. "• 또한 외래 키는 다른 테이블에서 일관되게 이름이 지정되어야합니다. 그렇지 않은 사람을 때리는 것은 합법적이어야합니다. 이 작업을 수행.". 나는 내 친구 패트릭이 실수를 한 적이 없지만 일반적으로 쓰고 있습니다. 그들이 함께 당신을 이길 계획이라면 어떨까요? :)


파티에 아주 늦었지만 여전히 열 접두사에 대해 2 센트를 추가하고 싶었습니다.

열 이름 자체가 전체 데이터베이스에서 고유하다는 사실을 기반으로 열에 대해 table_column (또는 tableColumn) 명명 표준을 사용하는 데 두 가지 주요 인수가있는 것 같습니다.

1) 쿼리에서 항상 테이블 이름 및 / 또는 열 별칭을 지정할 필요가 없습니다.

2) 열 이름에 대한 전체 코드를 쉽게 검색 할 수 있습니다.

두 가지 주장 모두 결함이 있다고 생각합니다. 접두사를 사용하지 않고 두 문제에 대한 해결책은 간단합니다. 내 제안은 다음과 같습니다.

항상 SQL에서 테이블 이름을 사용하십시오. 예를 들어, 항상 column 대신 table.column을 사용하십시오.

이제 table_column 대신 table.column을 검색 할 수 있으므로 2)를 분명히 해결합니다.

그러나 나는 당신이 비명을 지르는 것을들을 수 있습니다. 어떻게 해결합니까 1)? 정확히 이것을 피하는 것이 었습니다. 예, 그렇습니다.하지만 솔루션에는 끔찍한 결함이있었습니다. 왜? 글쎄, 접두사 솔루션은 다음과 같이 요약됩니다.
모호성이있을 때 table.column을 지정할 필요가 없도록 모든 열의 이름을 table_column으로 지정합니다!
그러나 이것은 이제부터는 항상 열을 지정할 때마다 열 이름을 작성해야 함을 의미합니다. 하지만 어쨌든 그렇게해야한다면 항상 명시 적으로 table.column을 작성하는 것보다 이점은 무엇일까요? 정확히는 이점이 없으며 입력 할 문자 수가 똑같습니다.

편집 : 예, 접두사로 열 이름을 지정하면 올바른 사용법이 적용되는 반면 내 접근 방식은 프로그래머에 의존한다는 것을 알고 있습니다.


필수 데이터베이스 명명 규칙 (및 스타일) (자세한 설명을 보려면 여기를 클릭하십시오)

테이블 이름은 짧고 모호하지 않은 이름을 선택합니다. 하나 또는 두 단어 이하로 테이블을 구별하면 고유 필드 이름의 이름을 쉽게 지정할 수있을뿐만 아니라 조회 및 연결 테이블이 테이블에 복수형이 아닌 단수 이름을 제공합니다 (업데이트 : 나는 여전히 주어진 이유에 동의합니다 이 컨벤션을 위해,하지만 대부분의 사람들은 정말 복수의 테이블 이름을 좋아하기 때문에 제 입장을 부드럽게했습니다.) 위의 링크를 따르십시오.


테이블 이름은 단수입니다. 누군가와 그 주소 사이의 현실을 모델링했다고 가정 해 보겠습니다. 예를 들어 데이터 모델을 읽고 있다면 '각 사람은 0,1 또는 여러 주소에 살 수 있습니다.'를 선호합니다. 또는 '각 사람은 0,1 또는 여러 주소에 살 수 있습니다.' 사람들을 사람으로 바꾸는 것보다 복수형 주소를 사용하는 것이 더 쉽다고 생각합니다. 또한 집합 명사는 단수 버전과 매우 유사합니다.



--Example SQL

CREATE TABLE D001_Students
(
    StudentID INTEGER CONSTRAINT nnD001_STID NOT NULL,
    ChristianName NVARCHAR(255) CONSTRAINT nnD001_CHNA NOT NULL,
    Surname NVARCHAR(255) CONSTRAINT nnD001_SURN NOT NULL,
    CONSTRAINT pkD001 PRIMARY KEY(StudentID)
);

CREATE INDEX idxD001_STID on D001_Students;

CREATE TABLE D002_Classes
(
    ClassID INTEGER CONSTRAINT nnD002_CLID NOT NULL,
    StudentID INTEGER CONSTRAINT nnD002_STID NOT NULL,
    ClassName NVARCHAR(255) CONSTRAINT nnD002_CLNA NOT NULL,
    CONSTRAINT pkD001 PRIMARY KEY(ClassID, StudentID),
    CONSTRAINT fkD001_STID FOREIGN KEY(StudentID) 
        REFERENCES D001_Students(StudentID)
);

CREATE INDEX idxD002_CLID on D002_Classes;

CREATE VIEW V001_StudentClasses
(
    SELECT
        D001.ChristianName,
        D001.Surname,
        D002.ClassName
    FROM
        D001_Students D001
            INNER JOIN
        D002_Classes D002
            ON
        D001.StudentID = D002.StudentID
);

이것이 제가 배운 관습이지만 여러분이 개발 호스에서 사용하는 모든 것에 적응해야합니다.

  1. 복수형. 엔티티의 모음입니다.
  2. 예. 속성은 엔터티의 단일 속성을 나타냅니다.
  3. 예, 접두사 테이블 이름을 사용하면 모든 제약 인덱스 및 테이블 별칭의 이름을 쉽게 추적 할 수 있습니다.
  4. 테이블 및 열 이름의 경우 Pascal Case, 인덱스 및 제약 조건의 경우 접두사 + ALL 대문자.

참고 URL : https://stackoverflow.com/questions/7662/database-table-and-column-naming-conventions

반응형