2つのテーブルがあるとします。
Table: Color
Columns: Id, ColorName, ColorCode
Table: Shape
Columns: Id, ShapeName, VertexList
色を形にマップするテーブルを何と呼ぶべきですか?
Table: ???
Columns: ColorId, ShapeId
Shape2Color
、ShapeXColor
、ShapeColorLink
。
2つのテーブルがあるとします。
Table: Color
Columns: Id, ColorName, ColorCode
Table: Shape
Columns: Id, ShapeName, VertexList
色を形にマップするテーブルを何と呼ぶべきですか?
Table: ???
Columns: ColorId, ShapeId
Shape2Color
、ShapeXColor
、ShapeColorLink
。
回答:
コンピュータサイエンスの2つだけのハードなものがあります:キャッシュの無効化と命名のものは
- フィルKarlton
many-to-many
関係を表すテーブルに適切な名前を付けると、関係が読みやすくなり、理解しやすくなります。素晴らしい名前を見つけるのは簡単なことではありませんが、通常は考えるのに時間をかける価値があります。
例:Reader
とNewspaper
。
A Newspaper
は多くReaders
、a Reader
は多くNewspapers
リレーションシップと呼ぶこともできますNewspaperReader
が、のような名前を付けるとSubscription
、テーブルの内容がわかりやすくなります。
この名前Subscription
は、後でテーブルをオブジェクトにマップする場合に備えて、より慣用的になっています。
many-to-many
テーブルの命名規則は、リレーションに関係する両方のテーブルの名前を連結したものです。ColourShape
あなたの場合、賢明なデフォルトになります。それは私がニックDが思う、と述べ思い付いた:2つの偉大な提案Style
とTexture
。
興味深い回答の約半分は、多対多の関係を実装するテーブルの一般的な用語を提供し、回答の残りの半分は、この特定のテーブルの名前を示唆しています。
これらのテーブルを交差点テーブルと総称しました。
命名規則に関しては、ほとんどの人は、多対多の関係にある2つのテーブルの融合である名前を付けます。したがって、この場合は「ColorShape
」または「」ShapeColor
です。しかし、これは人工的で扱いにくいように見えます。
Joe Celkoは、著書「SQLプログラミングスタイル」で、これらのテーブルに何らかの自然言語の名前を付けることを推奨しています。たとえば、ShapeがColorで色付けされている場合、テーブルに名前を付けます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
これは、両方のテーブルのキーがJunctionテーブルの複合主キーを形成する多対多の関係に行くときに使用されます。
エンティティの名前を組み合わせて使用し、複数に入れることをお勧めします。したがって、テーブルの名前は「多対多」の接続を表します。
あなたの場合:
色+形状= ColorsShapes
連想という言葉も聞いたことがありますテーブル使用されます。
テーブルの名前は、ColorShapeAssociations
各行がその色とその形状の間の関連を表すことを意味している場合があります。行が存在するということは、色がその形になることと、形がその色になることを意味します。特定の色のすべての行は、その色が関連付けられているすべての形状のセットであり、特定の形状の行は、その形状が入ったすべての色のセットです...
一般に、ほとんどのデータベースには、インデックスや主キーなどに何らかの命名規則があります。PostgreSQLでは、次の命名が提案されています。
あなたのテーブルは私にリンクされたテーブルです。上記の命名に合わせるために、以下を選択します。
テーブルオブジェクトのリストでは、リンクテーブルはtablename1の後になります。これは視覚的に魅力的かもしれません。しかし、他の人が提案したように、リンクの目的を説明する名前を選択することもできます。これは、id列の名前を短く保つのに役立つ場合があります(リンクに独自の名前付きIDが必要で、他のテーブルで参照されている場合)。
これほど恣意的なものに答えるのは難しいですが、私は、基礎となる関係の一般的な説明ではなく、実際のドメインで何かにちなんで名前を付けることを好む傾向があります。
多くの場合、この種のテーブルは、ドメインモデルにとってよりリッチなものに進化し、リンクされた外部キーを超えた追加の属性を引き受けます。
たとえば、色に加えてテクスチャを保存する必要がある場合はどうでしょうか?SHAPE_COLORテーブルを拡張してそのテクスチャを保持することは、少しファンキーに思えるかもしれません。
一方、今日の要件に基づいて十分な情報に基づいて決定し、後で追加の要件が導入されたときにリファクタリングする準備をしていることについても、言うべきことがあります。
そうは言っても、後で導入される追加の表面のような特性があるだろうという洞察があれば、それをSURFACEと呼びます。そうでなければ、私はそれをSHAPE_COLORまたはある種の何かと呼んで、より差し迫った設計問題に進むことに問題はないでしょう。
私が個人的に好きなテーブルを結合するために私がよく見ている慣習は「Colour_v_Shape」で、これは俗に「対テーブル」と呼ばれていると聞いたことがあります。
テーブルが多対多の関係を表していることが一目で非常に明確になり、複合語を形成する可能性のある2つの単語、たとえば「バター」を連結しようとすると、(まれではありますが)混乱する状況を回避できます。また、「Milk」は「ButterMilk」になる可能性がありますが、「Buttermilk」というエンティティも表す必要がある場合はどうでしょうか。
このようにすると、「Butter_v_Milk」と「Buttermilk」ができます-混乱はありません。
また、元の質問にFoo Fightersの参照があると思います。