동일한 이름의 열을 포함하는 SQL 테이블을 갖는 것은 잘못된 코딩 습관입니까?

StackOverflow https://stackoverflow.com/questions/865265

문제

예:

CREATE TABLE ErrorNumber
(
     ErrorNumber int,
     ErrorText varchar(255),
)

이로 인해 다음과 같은 쿼리가 발생할 수 있습니다.

SELECT ErrorNumber FROM ErrorNumber WHERE ErrorNumber=10
도움이 되었습니까?

해결책

테이블의 열로 Errornumber가 기본 키라고 가정하고 있습니까? 이 경우 테이블 열 ErrornumberId의 이름을 지정할 수 있습니다.

나는 그것이 열악한 코딩 관행이라는 것을 모르지만, 그것이 가독성을 위해 무엇이든하고 있다고 상상할 수 없습니다. 당신이 제공 한 예제는 쿼리 혼란이 어떻게 될 수 있는지 보여주는 데 큰 도움이됩니다.

내가 확실하지 않은 또 다른 점은 이것 (열 이름이 테이블 이름과 동일)이 오류를 일으킬 경우입니까? 공급 업체마다 다르다고 확신합니다.

다른 팁

CREATE TABLE Errors (
    Number int,
    Description varchar(255)
)

위의 것이 더 나은 이름 지정 체계라고 생각합니다.

  • 테이블 이름은 이제 무엇인지 나타냅니다.
  • 열에는 테이블에 "오류"라는 단어가 필요하지 않습니다.

기본값을 고수하고 기본 키 ID의 이름을 지정할 수 있습니다.

나는 동일한 이름을 테이블과 공유하는 열을 갖는 것이 좋은 생각이라고 생각하지 않습니다. 작동하더라도 혼란 스럽습니다. 테이블의 이름을 오류로 바꾸거나 열을 Errornum 또는 NUM으로 바꾸십시오.

예, 그것은입니다. 간단한 데이터 모델에서 대부분의 간단한 테이블은 복수 명사 여야합니다. 예에서 표는 "ID"및 "설명"의 두 열이있는 "오류"라고 불러야합니다.

나는 DWC에 동의하며, 어떤 유형의 오류 테이블과 마찬가지로 테이블을 조금 더 설명적인 것을 한 단계 더 발전시킬 것입니다. 코드에서 사용할 오류를 저장하는 데 사용되는 경우 한 가지이며 오류를 기록하는 테이블이 다른 것입니다. 무엇을 사용하고 있는지 확실하지 않으므로 실제로 사용 된 상황에 맞는 것을 말하는 것은 실제로 당신에게 달려 있습니다. "오류"라는 테이블을 볼 때 로그 테이블인지 또는 오류 코드를 찾는 데 사용되는 조회 테이블이 확실하지 않습니다. 아마도 오류 코드와 같은 것보다 후자라면 좋은 이름이 될 것입니다.

CREATE TABLE ErrorCodes
(
Id int,
Number int,
Description varchar(255)
)

가난합니까? 어쩌면 약간이지만 중요한 것은 없습니다.

나는 그것이 큰 것이 없다는 데 동의합니다.

우리는 애플리케이션에 전용 테이블과 ID와 "이름"필드가 있습니다. 드롭 다운 목록에 사용됩니다.

그래서 나는 다음과 같이 설정했습니다.

목록 이름은 다음과 같습니다

테이블 이름은 다음과 같습니다

ID는 : StateID입니다

실제 상태 값 열은 StateName입니다

그것은 우리를 위해 작동합니다.

귀하의 특정한 경우, 위의 제안대로 수행하고 테이블 오류를 지정합니다.

데이터베이스 공급 업체가 이에 의해 혼란스러워지면 다른 데이터베이스 공급 업체를 사용하십시오. 모든 데이터베이스는 문제없이 쉽게 구문 분석해야합니다.

가독성 이유에 대한 좋은 관행이 아닐 수도 있다는 데 동의합니다.

형태의 문제입니다. 개인적으로, 나는 대부분의 테이블 이름을 복수로 만듭니다. 그러면 결코 일어나지 않을 것입니다. 이 특별한 경우, 내 테이블은 errornumbers이고 테이블 필드는 Errornumber입니다 (실제로는 erornumberid를 사용합니다).

다시 말하지만, 귀하 또는 귀하의 회사는 표준을 코딩합니다. 그것이 나쁜 형태라면, 그것은 매우 작은 위반입니다. 무엇이든, 위반에 더 많은 변수 이름에 누락 된 ID.

테이블이 두 개 이상의 행으로 구성될 것으로 예상되는 경우 집합적인 용어를 이름으로 사용하는 것이 좋습니다.이는 단수형을 취하고 's'를 추가하는 것과는 다릅니다.저는 각각 'Employees'와 'EmployeesSalaries'보다 'Personnel'과 'Payroll'을 선호합니다.그리고 'Entitys' 같은 이름은 빼서 찍어야 합니다 :)

이를 고려하고 디자인의 열을 고려하여 문제의 테이블 이름을 '오류'로 지정하겠습니다.이제 나는 많은 코더들이 테이블 이름에 대해 단수형 용어를 선호한다는 것을 알고 있지만 그것은 '잘못된 코딩 관행'보다는 단지 다른 스타일일 뿐입니다.

단일 행 테이블이 필요할 때가 있습니다.DBMS를 사용하는 응용 프로그램에서 사용되는 pi의 공유 근사값을 포함하는 '상수' 테이블...하지만 내가 염두에 둔 '상수' 테이블에는 서로 다른 상수에 대한 여러 열이 있으므로 집합적인 용어를 이름으로 얻습니다.

아마도 애플리케이션이 하나의 상수만 사용한 경우 'Pi'라는 테이블이 생길 수 있을까요?제가 선택한 또 다른 스타일은 테이블 이름에 UpperCamelCase를 사용하고 열 이름에 lower_case_separated_by_underscores를 사용하는 것입니다.따라서 나는 여전히 테이블과 열을 구별할 수 있습니다.

SELECT pi FROM Pi;

[여기 SO에 있는 것과 같은 코드 파서를 사용하면 작업도 더 쉬워집니다!]

실제로 나는 거의 독점적으로 테이블 상관 관계 이름을 사용하는 경향이 있으므로 다음과 같이 작성할 가능성이 더 높습니다.

SELECT P1.pi 
  FROM Pi AS P1;

또한 일부 집합 용어는 단수 용어와 철자가 동일하다는 점을 고려하세요.'종', '사슴', '양', '물고기' 및 아마도 동물의 왕국과 관련이 없는 다른 많은 것들이 있을 것입니다. 하지만 지금은 정신적 장애를 겪고 있습니다 :)

따라서 내가 선호하는 데이터 요소 명명 규칙을 사용하더라도 동일한 이름의 열이 포함된 SQL 테이블을 상상할 수는 있지만 실제로는 거의 발생하지 않습니다.

DWC의 Sumpint 이름의 경우 +1.

"열 이름은 값의 도메인을 의미해야한다"의 문제는 컨텍스트를 간과한다는 것입니다. 열 이름이 존재합니다 테이블의 맥락에서. 결코 모호하지 않습니다. 도메인은 이름과 독립적으로 제어됩니다.

구별 할 수없는 사람이 존재합니까? Errors.Description 그리고 Parts.Description 그리고 Problems.Description, 또는 모든 열이 이름을 지정한다고 가정합니다 Description 또는 Name 같은 거룩한 우물에서 끌려?

즉, 나는 다음과 같은 일반적인 용어를 사용하지 않습니다. 숫자 또는 ID 기본 키 열의 경우 매우 다른 이유로 : 열에는 외국 키로 나타나는 새 이름이 필요합니다.

예를 들어 오류 번호를 기록해야한다고 가정합니다. Actions 테이블. Actions.Number 오류 번호를 참조 할 수 없으므로 우리는 다음과 같은 것을 발명해야합니다. Actions.ErrorNumber. 그렇다면 ErrorNumber 다른 곳에서는 키 역할을하는 동일한 이름을 가질 수 있습니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top