두 개의 테이블이 있다고 가정 해 봅시다.
Table: Color
Columns: Id, ColorName, ColorCode
Table: Shape
Columns: Id, ShapeName, VertexList
색상을 모양에 매핑하는 테이블을 무엇이라고해야합니까?
Table: ???
Columns: ColorId, ShapeId
Shape2Color, ShapeXColor, ShapeColorLink.
두 개의 테이블이 있다고 가정 해 봅시다.
Table: Color
Columns: Id, ColorName, ColorCode
Table: Shape
Columns: Id, ShapeName, VertexList
색상을 모양에 매핑하는 테이블을 무엇이라고해야합니까?
Table: ???
Columns: ColorId, ShapeId
Shape2Color, ShapeXColor, ShapeColorLink.
답변:
컴퓨터 과학에는 캐시 무효화와 이름 지정 문제
, 필 칼튼의 두 가지 어려운 점이 있습니다.
many-to-many관계 를 나타내는 테이블의 이름이 좋으면 관계를 읽고 이해하기가 더 쉽습니다. 때로는 위대한 이름을 찾는 것이 사소한 것이 아니지만 일반적으로 생각하는 데 시간을 할애 할 가치가 있습니다.
예 : Reader및 Newspaper.
A는 Newspaper많은이 Readers과는 Reader많이있다Newspapers
관계를 호출 할 수는 NewspaperReader있지만 Subscription테이블 이름 에 대해 더 잘 전달할 수 있습니다.
Subscription나중에 테이블을 객체에 매핑하려는 경우 이름 이 더 관용적입니다.
many-to-many테이블 이름 지정 규칙 은 관계에 관련된 두 테이블의 이름을 연결 한 것입니다. ColourShape귀하의 경우 합리적인 기본값이 될 것입니다. 그게 내가 닉 D 생각했다 내놓았다 : 두 위대한 제안 Style하고 Texture.
답의 절반 정도가 흥미 롭다면 다 대다 관계를 구현하는 테이블에 대한 일반적인 용어를 제공하고 나머지 절반은이 특정 테이블의 이름을 제안합니다.
이 테이블 교차점 테이블을 일반적으로 불렀습니다 .
명명 규칙과 관련하여 대부분의 사람들은 다 대다 관계에서 두 테이블의 합병 인 이름을 지정합니다. 따라서이 경우 " ColorShape"또는 " ShapeColor." 그러나 나는 이것이 인위적이고 어색한 것처럼 보입니다.
Joe Celko는 자신의 저서 "SQL Programming Style"에서 이러한 테이블의 이름을 자연 언어로 추천합니다. 예를 들어, 셰이프에 색상이 지정된 경우 테이블 이름을 지정하십시오 ColoredBy. 그러면 다음과 같이 자연스럽게 읽거나 읽는 다이어그램을 가질 수 있습니다.
Shape <-- ColoredBy --> Color
반대로 색상의 모양을 말할 수 있습니다.
Color <-- Colors --> Shape
그러나 이것은 중간 테이블이 Color복수 명명 규칙과 같은 것으로 보입니다 . 너무 혼란 스럽습니다.
아마도 ColoredBy명명 규칙 을 사용하는 것이 가장 분명합니다 . 패시브 음성을 사용하면 이름 지정 규칙이 더 명확 해집니다.
HasColor자연어를 사용하는 교차 테이블의 다른 가능한 이름이 될 수 있다고 생각 합니다.
hasColour/ ColouredBy무엇을? DESCRIBE관계를 찾는 데 사용해야 하는 명명의 목적을 무시합니다 .
ShapeHasColor와 TextHasColor?
정보를 제공하는 한 원하는대로 테이블 이름을 지정하십시오.
COLOR_SHAPE_XREF
모델 관점에서 테이블을 조인 / 롤러 리 / 상호 참조 테이블이라고합니다. 나는 _XREF관계를 분명하게하기 위해 마지막 에 사용하는 습관을 유지했습니다 .
매핑 테이블이 일반적으로 호출됩니다.
ColorToShape
ColorToShapeMap
To이름 에 사용하는 아이디어와 비슷합니다 . HighlightColor가있는 Shape가있는 경우 어떻게해야합니까? 호출하면 ShapeHighlightColor색상에 매핑 된 ShapeHighlight인지 강조 색상에 매핑 된 Shape인지에 따라 조금 모호합니다. 따라서 ShapeToHighlightColor더 명확 할 수 있습니다.
DBA와 함께 조인 테이블 이라고 불렀습니다. .
관계에 명시적인 도메인 특정 이름이없는 한 Colour_Shape는 상당히 일반적입니다.
Colour_Shape_Colour하고 Colour_Shape_Shape.
또는 Bridge Table
또는 Join Table
또는 Map Table
또는 Link Table
또는 Cross-Reference Table
이것은 두 테이블의 키가 접합 테이블의 복합 기본 키를 형성하는 다 대다 관계를 수행 할 때 사용됩니다.
엔터티 이름을 조합하여 사용하는 것이 좋습니다. 따라서 테이블의 이름은 "다 대다"연결을 나타냅니다.
귀하의 경우 :
색상 + 모양 = 색상
또한 연관 테이블 이라는 용어를 들었습니다 .
테이블 이름은 ColorShapeAssociations각 행이 해당 색상과 해당 모양 사이의 연결을 나타냅니다. 행이 존재하면 색상이 해당 모양으로오고 모양이 해당 색상으로옵니다. 특정 색상의 모든 행은 색상과 관련된 모든 모양의 집합이며 특정 모양의 행은 모양이 들어간 모든 색상의 집합입니다.
일반적으로 대부분의 데이터베이스에는 인덱스, 기본 키 등의 명명 규칙이 있습니다. PostgreSQL에서는 다음과 같은 이름이 제안되었습니다.
당신의 테이블은 나에게 연결된 테이블입니다. 위의 이름과 일치하도록 다음을 선택합니다.
테이블 개체 목록에서 연결된 테이블은 tablename1 뒤에 있습니다. 시각적으로 더 매력적일 수 있습니다. 그러나 다른 사람들이 제안한 것처럼 링크의 목적을 설명하는 이름을 선택할 수도 있습니다. 이렇게하면 id 열의 이름을 짧게 유지하는 데 도움이 될 수 있습니다 (링크에 자체 명명 된 id가 있어야하고 다른 테이블에서 참조되는 경우).
이처럼 임의의 것을 대답하기는 어렵지만 기본 관계에 대한 일반적인 설명 대신 실제 도메인에서 무언가를 명명하는 것에 대한 tosh의 아이디어를 선호하는 경향이 있습니다.
종종 이런 종류의 테이블은 도메인 모델에 더 풍부한 것으로 발전하고 연결된 외래 키 이상의 추가 속성을 취합니다.
예를 들어 색상 외에 텍스처를 저장해야하는 경우 어떻게해야합니까? SHAPE_COLOR 테이블을 확장하여 텍스처를 유지하는 것이 약간 펑키하게 보일 수 있습니다.
다른 한편으로, 오늘날 어떤 요구 사항을 기반으로 정보에 입각 한 의사 결정을 내리고 나중에 추가 요구 사항이 도입 될 때 리팩토링 할 준비가되어 있다는 말도 있습니다.
그러나 나중에 소개 할 표면과 같은 추가 속성이 있다는 통찰력이 있다면 SURFACE라고 부릅니다. 그렇지 않다면 SHAPE_COLOR 또는 그와 비슷한 이름으로 부르고 더 시급한 디자인 문제로 넘어가는 데 아무런 문제가 없습니다.
내가 개인적으로 좋아하는 테이블을 조인하는 것에 대한 많은 규칙은 'Colour_v_Shape'이며, 사람들은 구어체를 '대표'라고 말합니다.
테이블이 다 대 다 관계를 나타내는 것을 한눈에 알 수 있으며, 복합 단어를 형성 할 수있는 두 단어 (예 : '버터')를 연결하려고 할 때 혼동되는 상황을 피할 수 있습니다. 'Milk'는 'ButterMilk'가 될 수 있지만 'Buttermilk'이라는 엔티티를 나타내야하는 경우 어떻게해야합니까?
이렇게하면 'Butter_v_Milk'와 'Buttermilk'가 혼란스럽지 않습니다.
또한 원래 질문에 Foo Fighters 참조가 있다고 생각합니다.