Como devo nomear uma tabela que mapeia duas tabelas juntas? [fechadas]

137

Digamos que eu tenho duas tabelas:

Table: Color
Columns: Id, ColorName, ColorCode

Table: Shape
Columns: Id, ShapeName, VertexList

Como devo chamar a tabela que mapeia as cores para moldar?

Table: ???
Columns: ColorId, ShapeId
devuxer
fonte
Alias ​​ColorShape e ShapeColor para simetria.
28710 LukLed
2
Acabei de me deparar com uma pergunta semelhante que não havia visto antes: stackoverflow.com/questions/1764483/… . Algumas outras idéias de que rosca: Shape2Color, ShapeXColor, ShapeColorLink.
Devuxer 28/11/2009
Se houvesse um padrão de nomeação de tabelas de junção - isso não seria baseado em opnion. Então essa teria sido a resposta para a pergunta. Ao encerrar a pergunta, você encerra a possibilidade de alguém como eu saber se existem maneiras padrão de nomear suas tabelas de junção ou não. Por favor, reconsidere - os que fechou ...
LEALO

Respostas:

187

Há apenas duas coisas difíceis na Ciência da Computação: invalidação de cache e nomeação de coisas
- Phil Karlton

A criação de um bom nome para uma tabela que representa um many-to-manyrelacionamento facilita a leitura e o entendimento. Às vezes, encontrar um ótimo nome não é trivial, mas geralmente vale a pena gastar algum tempo pensando.

Um exemplo: Readere Newspaper.

A Newspapertem muitos Readerse a Readertem muitosNewspapers

Você pode chamar o relacionamento, NewspaperReadermas um nome como Subscriptionpode transmitir melhor do que se trata a tabela.

O nome Subscriptiontambém é mais idiomático, caso você queira mapear a tabela para objetos posteriormente.

A convenção para nomear many-to-manytabelas é uma concatenação dos nomes das duas tabelas envolvidas na relação. ColourShapeseria um padrão sensato no seu caso. Dito isto, acho que Nick D apresentou duas ótimas sugestões: Stylee Texture.

tosh
fonte
10
+1: bem dito - um nome cuidadosamente escolhido agora facilitará muito a manutenção no futuro.
Preet Sangha 28/11/2009
115
"Há apenas duas coisas difíceis em Ciência da Computação: invalidação de cache, nomear as coisas, e off-by-one erros"
Neil McGuigan
1
digamos, se houver uma categoria para produtos e outra categoria para receita. para ambas as tabelas, teremos recipes_categories e product_categories, e como não podemos apenas "categorias" nome da tabela para ambas as tabelas, a fim de evitar o conflito, as tabelas de junção para product e recipes serão "recipes_recipe_categories" e "product_product_categories"
c9s 13/06
3
Estritamente falando, as informações de conexão não significam adicionar novas informações. Eu acho que é o que acontece quando você tenta encontrar uma palavra apropriada para tabelas de junção. As pessoas que lêem jornais não os tornam assinantes e não há formas sem cor. O uso de "assinantes" está adicionando novas informações (significado) ao conectar leitores a jornais. E não há palavras para descrever a conexão entre forma e cor - nunca houve algo oposto, portanto não há nome para isso. Lembre-se de que não há novos atributos dados em uma tabela de junção.
Lealo 16/08/19
35

Que tal ColorShapeMap ou Estilo ou Textura .

Nick Dandoulakis
fonte
5
+1 para vir acima com algo mais elegante do que apenas juntando os nomes das tabelas
tosh
22

Interessante cerca de metade das respostas fornece um termo geral para qualquer tabela que implemente um relacionamento muitos-para-muitos, e a outra metade sugere um nome para essa tabela específica.

Eu chamei essas tabelas de interseções em geral.

Em termos de convenções de nomenclatura, a maioria das pessoas atribui um nome que é uma amálgama das duas tabelas no relacionamento muitos para muitos. Portanto, neste caso, " ColorShape" ou " ShapeColor." Mas acho isso artificial e estranho.

Joe Celko recomenda em seu livro "SQL Programming Style" para nomear essas tabelas de alguma maneira em linguagem natural. Por exemplo, se uma Forma é colorida por uma Cor, nomeie a tabela ColoredBy. Então você pode ter um diagrama que mais ou menos se lê naturalmente assim:

Shape <-- ColoredBy --> Color

Por outro lado, você poderia dizer que uma cor colore uma forma:

Color <-- Colors --> Shape

Mas isso parece que a tabela do meio é a mesma coisa que Colorcom uma convenção de nomenclatura plural. Muito confuso.

Provavelmente é mais claro usar a ColoredByconvenção de nomenclatura. Interessante que o uso da voz passiva torne a convenção de nomenclatura mais clara.

Bill Karwin
fonte
Bill, obrigado. Resposta muito interessante.
Devuxer 28/11/2009
@ Bill: Tudo sobre os sinônimos e a preferência de sinônimos afeta a convenção de nomenclatura.
OMG Ponies
2
Suponho que HasColorpoderia ser outro nome possível para a tabela de interseção que usa linguagem natural.
22330 Bill Karwin
1
@ Bill: O problema que tenho com essa convenção de nomenclatura é hasColour/ ColouredBypara quê? Isso anula o propósito de nomear a ser usado DESCRIBEpara descobrir os relacionamentos.
OMG Ponies
5
Semelhante ao comentário de OMG Ponies, o que acontece se outras coisas puderem ter uma cor? Se eu tiver outra tabela que mapeie Texto para Cor, precisaria de um nome exclusivo. Talvez ShapeHasColore TextHasColor?
Devuxer 28/11/2009
20

Nomeie a tabela como desejar, desde que seja informativa:

COLOR_SHAPE_XREF

Da perspectiva do modelo, a tabela é chamada de tabela de junção / corrollary / referência cruzada. Eu mantive o hábito de usar _XREFno final para tornar o relacionamento óbvio.

Pôneis OMG
fonte
1
Eu também uso _XREF ... sempre fez sentido para mim.
James Cronen
Eu cavo a ideia, mas como um usuário AutoCAD Eu preciso encontrar um sufixo diferente do que _XREF ...
Mike
7

Esta é uma entidade associativa e muitas vezes é significativa por si só.

Por exemplo, um relacionamento muitos para muitos entre TRAINS e TIMES dá origem a um HORÁRIO.

Se não houver uma nova entidade óbvia (como horário), a convenção é executar as duas palavras juntas, fornecendo COLOUR_SHAPE ou similar.

Ed Guiness
fonte
6

Uma tabela de mapeamento é o que geralmente é chamada.

ColorToShape
ColorToShapeMap

fonte
Na verdade, o termo Mapeamento geralmente é usado quando o relacionamento é unidirecional (um para um ou muitos). É esse o caso? Nesse caso, geralmente você não precisa de outra tabela. Se a cor sempre determina a forma, adicione uma coluna de forma à tabela de cores ou vice-versa. Uma tabela adicional geralmente é necessária apenas quando o relacionamento é de muitos para muitos. E, nesse caso, o termo mapeamento não é apropriado.
22330 Charles Bretana
Nesse caso, qualquer forma pode corresponder a qualquer cor, por isso é de muitos para muitos.
Devuxer 28/11/2009
2
BTW, seja uma tabela de mapeamento ou não, eu meio que gosto da idéia de usar Too nome. E se você tiver Forma com HighlightColor. Se você chamá-lo ShapeHighlightColor, é um pouco ambíguo se é um ShapeHighlight mapeado para uma cor ou uma Forma mapeada para uma Highlight Color. Então, ShapeToHighlightColorpode ser mais claro.
Devuxer 28/11/2009
FYI: Oracle (9i / 10g de qualquer maneira) tem um limite de 32 caracteres para nomes de tabelas, portanto você não pode ficar muito prolixo.
OMG Ponies
Eu usei a resposta acima, mas de uma maneira um pouco diferente. ou seja, Color_Shape_Map. Convenção: Table1_Table2_Map
Goldfish
6

Eu trabalhei com DBAs que chamam de tabela de junção .

Colour_Shape é bastante típico - a menos que o relacionamento tenha um nome específico de domínio explícito.

Dafydd Rees
fonte
1
Não gosto de sublinhados porque eles conflitam com as convenções de nomenclatura de chaves estrangeiras, de modo que você acaba com nomes desagradáveis ​​como Colour_Shape_Coloure Colour_Shape_Shape.
precisa saber é o seguinte
4

Normalmente, ouço isso chamado Tabela de junção. Eu nomeio a tabela pelo que ela une, portanto, no seu caso, ColorShape ou ShapeColor. Eu acho que faz mais sentido para uma Forma ter uma cor do que para uma Cor ter uma forma, então eu continuaria ShapeColor.

Bill the Lizard
fonte
4

Junction table

OU Bridge Table

OU Join Table

OU Map Table

OU Link Table

OU Cross-Reference Table

Isso entra em uso quando buscamos relacionamentos muitos para muitos, em que as chaves de ambas as tabelas formam a chave primária composta da tabela de junção.

priyanka.sarkar
fonte
4

Eu recomendo usar uma combinação dos nomes das entidades e colocá-los no plural. Assim, o nome da tabela expressará a conexão "muitos para muitos".

No seu caso:

Cor + Forma = CoresFormas

Palindromer
fonte
Se você estiver indo para a rota "nomes de tabelas", isso é melhor, pois a versão singular "normalmente" seria uma tabela com espaço para nome.
precisa saber é o seguinte
3

Tabela intermediária ou uma tabela de junção

Eu o chamaria de "ColorShapes" ou "ColorShape", dependendo da sua preferência

Neil N
fonte
3

Também ouvi o termo tabela associativa usada.

um nome para sua tabela pode ColorShapeAssociationssignificar que cada linha representa uma associação entre essa cor e essa forma. A existência de uma linha implica que a cor entra nessa forma e que a forma entra nessa cor. Todas as linhas com uma cor específica seriam o conjunto de todas as formas às quais a cor está associada e as linhas de uma forma específica seriam o conjunto de todas as cores em que a forma veio ...

Charles Bretana
fonte
Mas como você nomearia a tabela real?
Devuxer 28/11/2009
Depende do que a tabela está descrevendo. Se ele diz 'qualquer coisa laranja deve ser um losango', 'qualquer coisa roxo deve ser um círculo', etc, então você pode chamá-lo de uma coisa (cor da forma, talvez). Se for uma definição mais flexível - cores conhecidas para formas, permitindo que uma única forma apareça várias vezes - então talvez 'Shape_Colour_Map'.
31411 Jonathan Leffler
2

Em geral, a maioria dos bancos de dados possui algum tipo de convenção de nomenclatura para índices, chave primária e assim por diante. No PostgreSQL, a seguinte nomeação foi sugerida:

  • chave primária: tablename_columnname_ pkey
  • restrição exclusiva: tablename_columnname_ key
  • restrição exclusiva: tablename_columnname_ excl
  • índice para outros fins: tablename_columnname_ idx
  • chave estrangeira: tablename_columnname_ fkey
  • sequência: tablename_columnname_ seq
  • triggers: tablename_actionname_after | before_ trig

Sua mesa é uma tabela vinculada para mim. Para ficar de acordo com a nomeação acima, eu escolheria o seguinte:

  • tabela vinculada: tablename1_tablename2_ lnk

Em uma lista de objetos de tabela, a tabela vinculada será após tablename1. Isso pode ser visualmente mais atraente. Mas você também pode escolher um nome que descreva o objetivo do link, como outros sugeriram. Isso pode ajudar a manter o nome da coluna id curto (se o seu link precisar ter seu próprio ID nomeado e for mencionado em outras tabelas).

  • ou mesa gostei: purposename_ lnk
Frankenstein
fonte
1
Boa e velha notação húngara, nos encontramos novamente.
precisa saber é o seguinte
1

Eu sempre fui parcial com o termo "Hamburger Table". Não sei por que - parece bom.

Ah, e eu chamaria a tabela ShapeColor ou ColorShape, dependendo de qual é a tabela mais usada.

rédea
fonte
1

Tabela "Muitos-muitos". Eu chamaria isso de "ColourShape" ou vice-versa.

gbn
fonte
1

É difícil responder a algo tão arbitrário quanto isso, mas eu tendem a preferir a idéia de nomeá-lo após algo no domínio real, em vez de alguma descrição genérica dos relacionamentos subjacentes.

Muitas vezes, esse tipo de tabela evolui para algo mais rico para o modelo de domínio e assume atributos adicionais acima e além das chaves estrangeiras vinculadas.

Por exemplo, e se você precisar armazenar uma textura além da cor? Pode parecer um pouco estranho expandir a tabela SHAPE_COLOR para manter sua textura.

Por outro lado, também há algo a ser dito para tomar uma decisão bem informada com base em quais requisitos você possui hoje e estar preparado para refatorar quando requisitos adicionais forem introduzidos posteriormente.

Tudo isso dito, eu o chamaria SUPERFÍCIE se tivesse a percepção de que haveria propriedades adicionais de superfície introduzidas mais tarde. Caso contrário, não teria problemas em chamá-lo de SHAPE_COLOR ou algo do tipo e passar para problemas de design mais prementes.

Joe Holloway
fonte
1

Talvez apenas ColoredShape?

Não tenho certeza se entendi a pergunta. É sobre este caso específico ou você está procurando diretrizes gerais?

mafu
fonte
0

Eu o nomearia com os nomes exatos das tabelas que estão sendo unidas = ColorShape.

DOK
fonte
0

Além do que a Developer Art relacionou,

ColorShape

seria uma convenção de nomenclatura usual. No diagrama de ER, seria uma relação.

jaestevan
fonte
0

Chame de tabela de referência cruzada.

XREF_COLOR_SHAPE
(
     XCS_ID INTEGER
     C_ID   INTEGER
     S_ID   INTEGER
)
EvilTeach
fonte
0

Eu usaria r_shape_colorsou r_shape_colordependendo do seu significado.
r_seria um substituto para xref_neste caso.

Marius Burz
fonte
0

Meu voto é para um nome que descreva melhor a tabela. Nesse caso, pode ser, ShapeColormas em muitos casos um nome diferente de uma concatenação é melhor. Eu gosto de legibilidade e, para mim , isso significa sem sufixos, sem sublinhados e sem prefixos.

magnus
fonte
0

Eu pessoalmente escolheria o Colour_Shape, com o sublinhado: só porque vi essa convenção aparecer bastante. [mas concordo com os outros posts aqui de que provavelmente existem maneiras mais 'poéticas' de fazer isso].

Lembre-se de que as chaves estrangeiras também devem ser construídas nesta tabela de junção, que fará referência a ambas as tabelas Cor e forma, o que também ajudaria a identificar o relacionamento.

monojohnny
fonte
0

Uma convenção que vejo muito por juntar tabelas que eu pessoalmente gosto é 'Colour_v_Shape', que eu ouvi pessoas se referirem coloquialmente como 'versus tables'.

Deixa muito claro que a tabela representa um relacionamento muitos para muitos e ajuda a evitar essa situação (embora rara) confusa quando você tenta concatenar duas palavras que poderiam formar uma palavra composta, por exemplo 'Manteiga' e 'Milk' pode se tornar 'ButterMilk', mas e se você também precisasse representar uma entidade chamada 'Buttermilk'?

Fazendo dessa maneira, você teria 'Butter_v_Milk' e 'Buttermilk' - sem confusão.

Além disso, eu gosto de pensar que há uma referência ao Foo Fighters na pergunta original.

Breeno
fonte