¿Qué debería nombrar una tabla que mapea dos tablas juntas? [cerrado]

137

Digamos que tengo dos tablas:

Table: Color
Columns: Id, ColorName, ColorCode

Table: Shape
Columns: Id, ShapeName, VertexList

¿Cómo debo llamar a la tabla que asigna el color a la forma?

Table: ???
Columns: ColorId, ShapeId
devuxer
fuente
ColorShape y ShapeColor alias para simetría.
LukLed
2
Acabo de encontrar una pregunta similar que no había visto antes: stackoverflow.com/questions/1764483/… . Algunas otras ideas de ese hilo: Shape2Color, ShapeXColor, ShapeColorLink.
devuxer
Si hubiera un estándar para nombrar tablas de unión, entonces esto no estaría basado en opnion. Entonces esa habría sido la respuesta a la pregunta. Al cerrar la pregunta, cierra la posibilidad de que alguien como yo sepa si existen formas estándar de nombrar sus tablas de unión o no. Por favor reconsidere - los que lo cerraron ...
Lealo

Respuestas:

187

Solo hay dos cosas difíciles en informática: invalidación de caché y nombrar cosas
- Phil Karlton

La idea de un buen nombre para una tabla que represente una many-to-manyrelación hace que la relación sea más fácil de leer y comprender. A veces, encontrar un gran nombre no es trivial, pero generalmente vale la pena pasar un tiempo pensando en ello.

Un ejemplo: Readery Newspaper.

A Newspapertiene muchos Readersy a Readertiene muchosNewspapers

Podría llamar a la relación, NewspaperReaderpero un nombre como Subscriptionpodría transmitir mejor de qué se trata la tabla.

El nombre Subscriptiontambién es más idiomático en caso de que desee asignar la tabla a objetos más adelante.

La convención para nombrar many-to-manytablas es una concatenación de los nombres de ambas tablas que están involucradas en la relación. ColourShapesería un defecto razonable en su caso. Dicho esto, creo que a Nick D se le ocurrieron dos grandes sugerencias: Styley Texture.

tosh
fuente
10
+1: bien dicho: un nombre cuidadosamente elegido ahora hará que la mantenibilidad sea mucho más fácil en el futuro.
Saludo Sangha
115
"Solo hay dos cosas difíciles en Ciencias de la Computación: invalidación de caché, nombrar cosas y errores fuera de uno"
Neil McGuigan
1
digamos, si hay una categoría para productos y otra categoría para recetas. para ambas tablas tendremos recetas_categorías y categorías_productos, y dado que no podemos simplemente el nombre de la tabla "categorías" para ambas tablas, para evitar el conflicto, las tablas de unión para producto y receta serán "receta_categorías_de_productos" y "categorías_producto_producto"
c9s
3
Estrictamente hablando, la información de conexión no significa agregar nueva información. Creo que eso es lo que sucede cuando intentas encontrar una palabra adecuada para las tablas de unión. Las personas que leen periódicos no los hacen suscriptores, y no hay formas sin color. El uso de "suscriptores" está agregando nueva información (significado) al conectar lectores a periódicos. Y no hay palabras para describir la conexión de forma y color: nunca ha habido algo de lo contrario, por lo tanto, no hay nombre para ello. Recuerde que no hay nuevos atributos dados en una tabla de unión.
Lealo
35

¿Qué tal ColorShapeMap o Style o Texture ?

Nick Dandoulakis
fuente
55
1 para llegar a algo más elegante que acaba de unirse a los nombres de las tablas
Tosh
22

Interesante sobre la mitad de las respuestas dan un término general para cualquier tabla que implemente una relación de muchos a muchos, y la otra mitad de las respuestas sugiere un nombre para esta tabla específica.

Llamé a estas tablas tablas de intersecciones en general.

En términos de convenciones de nomenclatura, la mayoría de las personas dan un nombre que es una amalgama de las dos tablas en la relación de muchos a muchos. Entonces, en este caso, " ColorShape" o "" ShapeColor. Pero encuentro que esto se ve artificial e incómodo.

Joe Celko recomienda en su libro "Estilo de programación SQL" nombrar estas tablas de manera natural. Por ejemplo, si una Forma está coloreada por un Color, entonces nombra la tabla ColoredBy. Entonces podría tener un diagrama que se lea más o menos naturalmente de esta manera:

Shape <-- ColoredBy --> Color

Por el contrario, se podría decir que un Color colorea una Forma:

Color <-- Colors --> Shape

Pero esto parece que la tabla del medio es lo mismo que Colorcon una convención de nomenclatura plural. Demasiado confuso

Probablemente sea más claro usar la ColoredByconvención de nomenclatura. Es interesante que el uso de la voz pasiva aclare la convención de nomenclatura.

Bill Karwin
fuente
Bill, gracias. Muy interesante respuesta.
devuxer
@Bill: todo sobre los sinónimos y la preferencia de sinónimos afecta la convención de nomenclatura.
OMG Ponies
2
Supongo que HasColorpodría ser otro nombre posible para la tabla de intersección que usa lenguaje natural.
Bill Karwin el
1
@Bill: ¿El problema que tengo con esa convención de nombres es hasColour/ ColouredBypara qué? Derrota el propósito de nombrar para tener que usar DESCRIBEpara descubrir las relaciones.
OMG Ponis
55
Similar al comentario de OMG Ponies, ¿qué sucede si otras cosas pueden tener un color? Si tengo otra tabla que asigna Texto a Color, necesitaría un nombre único. Tal vez ShapeHasColory TextHasColor?
devuxer
20

Nombra la mesa como quieras, siempre que sea informativa:

COLOR_SHAPE_XREF

Desde la perspectiva del modelo, la tabla se denomina tabla de unión / corrollary / referencia cruzada. He mantenido la costumbre de usar _XREFal final para hacer obvia la relación.

Ponis OMG
fuente
1
Yo también uso _XREF ... siempre tiene sentido para mí.
James Cronen
Me gusta la idea, pero como usuario de AutoCAD necesito encontrar un sufijo diferente a _XREF ...
Mike
7

Esta es una entidad asociativa y, a menudo, es bastante importante por derecho propio.

Por ejemplo, una relación de muchos a muchos entre TRENES y TIEMPOS da lugar a un CALENDARIO.

Si no hay una nueva entidad obvia (como el horario), entonces la convención es ejecutar las dos palabras juntas, dando COLOUR_SHAPE o similar.

Ed Guiness
fuente
6

Una tabla de mapeo es lo que generalmente se llama esto.

ColorToShape
ColorToShapeMap

fuente
En realidad, el término mapeo se usa generalmente cuando la relación es unidireccional (uno a uno o muchos) ¿Es este el caso? Si es así, generalmente no necesita otra mesa. Si el color siempre determina la forma, agregue una columna de forma a la tabla de colores, o viceversa. Generalmente, solo se necesita una tabla adicional cuando la relación es de muchos a muchos. Y en ese caso, el término mapeo no es apropiado.
Charles Bretana el
En este caso, cualquier forma podría coincidir con cualquier color, por lo que es de muchos a muchos.
devuxer
2
Por cierto, ya sea una tabla de mapeo o no, me gusta la idea de usar Toen el nombre. ¿Qué pasa si tienes Shape con HighlightColor? Si lo llama ShapeHighlightColor, es un poco ambiguo si es un ShapeHighlight mapeado a un color o una Shape mapeado a un Highlight Color. Entonces, ShapeToHighlightColorpodría ser más claro.
devuxer
FYI: Oracle (9i / 10g de todos modos) tiene un límite de 32 caracteres para los nombres de tablas, por lo que no puede ser demasiado prolijo.
OMG Ponies
Utilicé la respuesta anterior pero de una manera un poco diferente. es decir, Color_Shape_Map. Convención: Table1_Table2_Map
Goldfish
6

He trabajado con DBA que lo llaman una tabla de unión .

Colour_Shape es bastante típico, a menos que la relación tenga un nombre específico de dominio explícito.

Dafydd Rees
fuente
1
No me gustan los guiones bajos porque entran en conflicto con las convenciones de nombres de claves foráneas, de modo que terminas con nombres desagradables como Colour_Shape_Coloury Colour_Shape_Shape.
Dan Bechard el
4

Por lo general, escucho que se llama una mesa de conexiones. Nombro la tabla por lo que une, así que en su caso, ya sea ColorShape o ShapeColor. Creo que tiene más sentido que una Forma tenga un color que un Color que tenga una forma, así que iría con eso ShapeColor.

Bill el lagarto
fuente
4

Junction table

O Bridge Table

O Join Table

O Map Table

O Link Table

O Cross-Reference Table

Esto entra en uso cuando buscamos relaciones de muchos a muchos donde las claves de ambas tablas forman la clave primaria compuesta de la tabla de unión.

priyanka.sarkar
fuente
4

Recomiendo usar una combinación de los nombres de las entidades y ponerlas en plural. Así, el nombre de la tabla expresará la conexión "muchos a muchos".

En tu caso:

Color + Forma = Colores Formas

Palindromer
fuente
Si va por la ruta de "nombres de tablas", esto es mejor ya que la versión singular "normalmente" sería una tabla de espacios de nombres.
Andrew Haust
3

Tabla intermedia o una tabla de unión

Lo llamaría "ColorShapes" o "ColorShape", según su preferencia

Neil N
fuente
3

También he escuchado el término tabla asociativa utilizada.

un nombre para su tabla puede ColorShapeAssociationssignificar que cada fila representa una asociación entre ese color y esa forma. La existencia de una fila implica que el color viene en esa forma y que la forma viene en ese color. Todas las filas con un color específico serían el conjunto de todas las formas con las que está asociado el color, y las filas para una forma específica serían el conjunto de todos los colores en los que esa forma vino ...

Charles Bretana
fuente
Pero, ¿cómo llamarías a la tabla real?
devuxer
Depende de lo que describa la tabla. Si dice "cualquier cosa naranja debe ser un rombo", "cualquier cosa púrpura debe ser un círculo", etc., entonces podría llamarlo una cosa (Color_de_Forma, tal vez). Si se trata de una definición más flexible: colores conocidos para las formas, lo que permite que aparezca una sola forma muchas veces, entonces quizás 'Shape_Colour_Map'.
Jonathan Leffler
2

En general, la mayoría de las bases de datos tienen algún tipo de convención de nomenclatura para índices, clave primaria, etc. En PostgreSQL se han sugerido los siguientes nombres:

  • clave primaria: tablename_columnname_ pkey
  • restricción única: tablename_columnname_ key
  • restricción exclusiva: tablename_columnname_ excl
  • índice para otros fines: tablename_columnname_ idx
  • clave externa: tablename_columnname_ fkey
  • secuencia: tablename_columnname_ seq
  • desencadenantes: tablename_actionname_after | before_ trig

Tu mesa es una mesa vinculada para mí. Para estar en línea con los nombres anteriores, elegiría lo siguiente:

  • tabla vinculada: tablename1_tablename2_ lnk

En una lista de objetos de tabla, la tabla vinculada estará después de tablename1. Esto podría ser visualmente más atractivo. Pero también puede elegir un nombre que describa el propósito del enlace como otros han sugerido. Esto podría ayudar a mantener corto el nombre de la columna de identificación (si su enlace debe tener su propia identificación con nombre y se hace referencia en otras tablas).

  • o le gustó la tabla: purposeename_ lnk
Frankenstein
fuente
1
Buena notación húngara, nos encontramos de nuevo.
Dan Bechard el
1

Siempre he sido parcial al término "tabla de hamburguesas". No sé por qué, simplemente suena bien.

Ah, y llamaría a la tabla ShapeColor o ColorShape dependiendo de cuál es la tabla más utilizada.

rienda
fuente
1

Mesa "Muchos-Muchos". Lo llamaría "ColourShape" o viceversa.

gbn
fuente
1

Es difícil responder algo tan arbitrario como esto, pero tiendo a preferir la idea de nombrarlo después de algo en el dominio real en lugar de una descripción genérica de las relaciones subyacentes.

Muy a menudo, este tipo de tabla evolucionará en algo más rico para el modelo de dominio y tomará atributos adicionales más allá de las claves externas vinculadas.

Por ejemplo, ¿qué sucede si necesita almacenar una textura además del color? Puede parecer un poco extraño expandir la tabla SHAPE_COLOR para mantener su textura.

Por otro lado, también hay algo que decir para tomar una decisión bien informada basada en los requisitos que tiene hoy y estar preparado para refactorizar cuando se introducen requisitos adicionales más adelante.

Dicho todo esto, lo llamaría SUPERFICIE si tuviera la idea de que más adelante se introducirían propiedades similares a la superficie. Si no, no tendría problemas para llamarlo SHAPE_COLOR o algo por el estilo y pasar a problemas de diseño más urgentes.

Joe Holloway
fuente
1

Tal vez solo ColoredShape?

No estoy seguro de haber entendido la pregunta. ¿Se trata de este caso específico o buscas pautas generales?

mafu
fuente
0

Lo nombraría con los nombres exactos de las tablas que se unen = ColorShape.

DOK
fuente
0

Además de lo que Developer Art ha relacionado,

ColorShape

sería una convención de nomenclatura habitual. En el diagrama ER, sería una relación.

jaestevan
fuente
0

Llámalo una tabla de referencia cruzada.

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

Yo usaría r_shape_colorso r_shape_colordependiendo de su significado.
r_sería un reemplazo para xref_en este caso.

Marius Burz
fuente
0

Mi voto es por un nombre que describa mejor la tabla. En este caso puede ser, ShapeColorpero en muchos casos es mejor un nombre diferente de una concatenación. Me gusta la legibilidad y para , eso significa sin sufijos, sin guiones bajos y sin prefijos.

Magnus
fuente
0

Yo personalmente elegiría Colour_Shape, con el guión bajo: solo porque he visto esta convención aparecer bastante. [pero estoy de acuerdo con las otras publicaciones aquí que probablemente hay formas más 'poéticas' de hacer esto].

Tenga en cuenta que las claves foráneas también deben construirse en esta tabla de unión que haría referencia tanto a las tablas de Color y forma que también ayudarían a identificar la relación.

monojohnny
fuente
0

Una convención que veo mucho para unir tablas que personalmente me gusta es 'Colour_v_Shape', que he escuchado a la gente referirse coloquialmente como 'versus tablas'.

De un vistazo, deja muy claro que la tabla representa una relación de muchos a muchos, y ayuda a evitar esa situación confusa (aunque rara) cuando intenta concatenar dos palabras que de otro modo podrían formar una palabra compuesta, por ejemplo 'Mantequilla' y 'Milk' puede convertirse en 'ButterMilk', pero ¿y si también necesitaras representar a una entidad llamada 'Buttermilk'?

Al hacerlo de esta manera, tendrías 'Butter_v_Milk' y 'Buttermilk', sin confusión.

Además, me gusta pensar que hay una referencia de Foo Fighters en la pregunta original.

Breeno
fuente