¿Cómo debo nombrar una tabla que mapea dos tablas juntas? [cerrado]


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 color a forma?

Table: ???
Columns: ColorId, ShapeId
Author: OMG Ponies, 2009-11-28

24 answers

Solo hay dos cosas difíciles en Ciencias de la Computación: invalidación de caché y nombrando cosas
-- Phil Karlton

Encontrar un buen nombre para una tabla que representa una relación many-to-many hace que la relación sea más fácil de leer y entender. A veces encontrar un gran nombre no es trivial, pero por lo general vale la pena pasar algún tiempo pensando.

Un ejemplo: Reader y Newspaper.

A Newspaper tiene muchos Readers y a Reader tiene muchos Newspapers

Se podría llamar a la relación NewspaperReader pero un nombre como Subscription podría transmitir mejor de qué se trata la tabla.

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

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

 148
Author: tosh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:16

¿ColorShapeMap o Estilo o Textura.

 29
Author: Nick Dandoulakis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-28 18:50:29

Nombra la tabla como quieras, siempre y cuando sea informativa:

COLOR_SHAPE_XREF

Desde la perspectiva del modelo, la tabla se denomina tabla de referencia cruzada/join/corrollary. He mantenido el hábito de usar _XREF al final para hacer que la relación sea obvia.

 17
Author: OMG Ponies,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-28 18:42:14

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

Llamé a estas tablas intersecciones tablas 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 muchos a muchos. Así que en este caso, "ColorShape" o "ShapeColor."Pero encuentro que esto parece artificial y torpe.

Joe Celko recomienda en su libro "SQL Programming Style" nombrar estas tablas en algún lenguaje natural. Por ejemplo, si una Forma está coloreada por un Color, entonces nombra la tabla ColoredBy. Entonces usted podría tener un diagrama que se lee más o menos naturalmente así:

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 central es lo mismo que Color con una convención de nomenclatura plural. Demasiado confuso.

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

 17
Author: Bill Karwin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-28 19:11:30

Esta es una Entidad asociativa y a menudo es significativa por derecho propio.

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

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

 6
Author: Ed Guiness,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-28 18:50:16

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

 4
Author: Bill the Lizard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-28 18:39:58

He trabajado con DBA que lo llaman join table.

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

 4
Author: daf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-28 19:20:21

A esto se le suele llamar tabla de asignación.

ColorToShape
ColorToShapeMap
 3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-28 18:37:29

Tabla Intermedia o Unirse a la Mesa

Lo llamaría "ColorShapes" o "ColorShape", dependiendo de su preferencia

 3
Author: Neil N,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-28 18:38:10

Junction table

O Bridge Table

O Join Table

O Map Table

O Link Table

O Cross-Reference Table

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

 3
Author: priyanka.sarkar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-29 04:15:15

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

Un nombre para su tabla podría ser ColorShapeAssociations lo que significa 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 entró la forma...

 2
Author: Charles Bretana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-29 17:09:38

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 ha sugerido la siguiente nomenclatura:

  • clave primaria: tablename_columnname_pkey
  • restricción única: tablename_columnname_ clave
  • restricción exclusiva: tablename_columnname_ excl
  • índice para otros fines: tablename_columnname_idx
  • clave externa: tablename_columnname_fkey
  • sequence: tablename_columnname_ seq
  • triggers: tablename_actionname_after / before_ trig

Su tabla es una tabla vinculada a mí. Para mantenerme en línea con el nombre anterior, elegiría lo siguiente:

  • tabla vinculada: tablename1_tablename2_lnk

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

  • o tabla que le gusta: purposename_ lnk
 2
Author: Frankenstein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-24 10:21:13

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

En su caso:

Color + Shape = ColorsShapes

 2
Author: Palindromer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-16 16:10:47

Siempre he sido parcial con el término "Mesa de hamburguesas". No sé por qué - simplemente suena bien.

Oh, y yo llamaría a la tabla ShapeColor o ColorShape dependiendo de cuál es la tabla más comúnmente utilizada.

 1
Author: rein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-28 18:45:17

Tabla"Muchos-Muchos". Yo lo llamaría "Colorshape" o viceversa.

 1
Author: gbn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-28 19:31:44

Es difícil responder a algo tan arbitrario como esto, pero tiendo a preferir la idea de tosh de nombrarlo después de algo en el dominio real en lugar de alguna 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 por encima y más allá de las claves foráneas vinculadas.

Por ejemplo, ¿qué pasa si necesita almacenar una textura además del color? Puede parecer un poco funky para 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 introduzcan requisitos adicionales más adelante.

Dicho esto, lo llamaría SUPERFICIE si tuviera la idea de que habría propiedades adicionales similares a la superficie introducidas más tarde. Si no, no tendría problemas llamándolo SHAPE_COLOR o algo de la ordenar y pasar a problemas de diseño más urgentes.

 1
Author: Joe Holloway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-28 21:06:11

Tal vez solo ColoredShape?

No estoy seguro de entender la pregunta. ¿Se trata de este caso específico o está buscando pautas generales?

 1
Author: mafu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-16 11:12:44

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

 0
Author: DOK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-28 18:40:46

En adiction a lo que el Arte Desarrollador ha relacionado,

ColorShape

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

 0
Author: j.a.estevan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-28 18:40:46

Llámelo una tabla de referencia cruzada.

XREF_COLOR_SHAPE
(
     XCS_ID INTEGER
     C_ID   INTEGER
     S_ID   INTEGER
)
 0
Author: EvilTeach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-28 19:20:12

Usaría r_shape_colors o r_shape_color dependiendo de su significado.
r_ sería un reemplazo para xref_ en este caso.

 0
Author: Marius Burz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-30 15:06:12

Mi voto es por un nombre que describa mejor la mesa. En este caso podría ser ShapeColor pero en muchos casos un nombre diferente de una concatenación es mejor. Me gusta la legibilidad y para me, eso significa sin sufijos, sin guiones bajos y sin prefijos.

 0
Author: magnus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-30 15:45:24

Yo personalmente iría por Colour_Shape, con el subrayado: solo porque he visto esta convención aparecer un poco. [pero de acuerdo con los otros posts 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 haga referencia a las tablas de Color y Forma, lo que también ayudaría a identificar la relación.

 0
Author: monojohnny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-30 16:07:47

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

Deja muy claro a simple vista que la tabla representa una relación de muchos a muchos, y ayuda a evitar esa (aunque rara) situación confusa cuando intenta concatenar dos palabras que de otra manera podrían formar una palabra compuesta, por ejemplo, 'Mantequilla ' y' Leche 'pueden convertirse en ' Suero de leche', pero ¿qué pasa si también necesita representar ¿entidad llamada 'Suero de leche'?

Haciéndolo 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.

 0
Author: Breeno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-10 11:39:15