En relación con la primera parte de mi pregunta: recientemente me preguntaba cuáles son los beneficios y las ventajas de tener un identificador único para ciertas tablas en una base de datos relacional. Solo como ejemplo, la API Graph (Facebook) permite buscar diferentes tipos de objetos como "Usuarios", "Eventos", "Páginas", etc. utilizando la misma URL, por ejemplo, https://domain/251906384206 devuelve un objeto de tipo "Evento" mientras que https://domain/195466193802264 devuelve un objeto de tipo "Grupo".Pros y contras de y formas de implementar identificador global único en la base de datos relacional?
¿Cuál es el beneficio de este enfoque en comparación con proporcionar una API menos "genérica", que se utilizaría de esta manera: https://domain/event/251906384206 o https://domain/group/195466193802264. En este caso, un identificador similar podría usarse para diferentes tipos de objetos porque cada tipo de objeto tiene su alcance identificador.
En cuanto a la segunda parte de la pregunta: ¿Cuáles son las opciones para implementar un identificador global único?
dos opciones que vienen a la mente son:
El uso de un enfoque basado en la herencia (tabla-por-clase, una sola mesa, etc.). Suponiendo que se utiliza un enfoque de tabla por clase (super tabla contiene identificador único como clave primaria solamente, subtabla que representa tipo de objeto contiene el mismo identificador como super tabla y datos adicionales), se requieren combinaciones entre super y sub tabla que parece escalar mal porque la súper mesa se convierte en un cuello de botella?
Proporcionar una tabla con 3 columnas, que contiene
- identificador único,
- objeto clave primar specifc tipo, y
- nombre de tabla.
Tablas adicionales por tipo de objeto que contiene una columna que hace referencia al identificador único como clave externa. Cada tabla específica de tipo de objeto tiene su propio ámbito de clave principal.
Ambos enfoques permitirían proporcionar una API genérica como la API FB mencionada anteriormente. El segundo enfoque permitiría usar claves primarias específicas de la tabla de objetos internamente y exponer el identificador único global únicamente. Sin embargo, si un identificador único global puede utilizarse internamente, el segundo enfoque también requerirá una unión.
¿Hay alguna experiencia con respecto a los pros/contras de un identificador global único y cuáles son las mejores prácticas para implementarlo?
"De nuevo, tu pregunta es más sobre cómo representar objetos en una base de datos, que el uso de G.U.I.D." Incorrecto, la primera parte de mi pregunta se refiere a los pros y los contras de usar un identificador global único desde el punto de vista del uso (por ejemplo, para poder diseñar una API fácil de usar). Suponiendo que se necesita un identificador global único, la segunda parte de mi pregunta se refiere a la cuestión de cómo implementar un identificador global único.Obviamente hay varias opciones. Una discusión de la última parte de la pregunta debe tener en cuenta las cuestiones de diseño de la base de datos. – Scholle
G.U.I.D. (s) son útiles cuando se usa una gran cantidad de registros y/o se va a utilizar la misma base de datos en varios clusters o servidores, ya que no hay claves duplicadas. – umlcat