mysql - una - nomenclatura base de datos
¿Cuál es la mejor práctica para nombrar tablas de bases de datos para proporcionar una organización natural? (8)
Ponemos prefijos comunes en tablas relacionadas para asegurar que se muestren uno al lado del otro en nuestro software de administración de base de datos (Toad, Enterprise Manager, etc.).
Entonces, por ejemplo, todas las tablas de usuario comienzan con la palabra Usuario:
- Usuario
- UserEvent
- UsuarioCompra
Idealmente, en honor a las tres grandes virtudes de un programador, estas tablas deberían llamarse Usuario, Evento, Compra, respectivamente, para guardar algo de mecanografía, ¿de acuerdo?
¿Es esta convención de nomenclatura la mejor (¿única?) Práctica para agrupar las tablas relacionadas juntas de forma natural?
Personalmente renombro mis tablas así:
- Tablas principales: tbl_user
- Tablas de referencia: ref_profil
- Tablas relacionadas: lnk_user_profil
Creo que depende de cómo y cómo planeas expandir tu modelo de datos. Por ejemplo, ¿qué pasa si decide que no solo desea tener Eventos de usuario, sino también Eventos de cuenta o Eventos de inicio de sesión, y Usuario, Cuentas e Inicios de sesión son todos tipos diferentes de entidades, pero comparten algunos Eventos. En ese caso, es posible que desee un modelo de base de datos normalizado:
- Usuarios (Id int, Name varchar)
- Cuentas (Id int, Name varchar)
- Logins (Id int, Nombre varchar)
- Eventos (Id int, Name varchar)
- UserEvents (UserId int, EventId int)
- AccountEvents (AccountId int, EventId int)
- LoginEvents (LoginId int, EventId int)
No utilizaría una convención de nomenclatura para alfabetizar nombres de tablas. Es bueno cuando funciona de esa manera, pero esto no debe ser por diseño.
Lea el libro de Joe Celko " SQL Programming Style ". Su primer capítulo en ese libro trata de nombrar convenciones, guiado por el estándar ISO 11179 para la asignación de nombres de metadatos. Una de sus recomendaciones es evitar prefijos innecesarios en su convención de nomenclatura.
Personalmente, estoy a favor de nombrar las condiciones similares a las que enumeraste allí, ya que es un patrón muy lógico, están organizadas de manera que puedes encontrarlas fácilmente y, en general, los bits adicionales de mecanografía generalmente no causan muchos problemas o reducciones. a tiempo.
Supongo que la convención de nomenclatura en SQL es o al menos debe seguir las mismas pautas que se utilizan en otros lenguajes de programación. Siempre he preferido el nombre de variable / nombre de clase que identifica claramente el propósito y que generalmente significa más tipeo. Creo que lo importante es recordar que el código solo se escribe una vez, pero se lee muchas veces, por lo que la claridad es vital. Los últimos 4 o 5 años he notado que los nombres de las variables han crecido de "eDS" a "employeeDataSet" y creo que IntelliSense es la razón principal de eso. Creo que veremos lo mismo en SQL desde Red Gate SQL Prompt y ahora MS SQL2008 ha introducido Intellisense en el mundo de base de datos mainstrem.
Tiendo a ir contra la corriente al nombrar las convenciones en dos aspectos aquí ...
No me gusta usar prefijos para que las cosas se agrupen en una UI determinada. Para mí, las tablas deben nombrarse de manera que en el código sean fáciles de leer y tengan sentido. Ha habido numerosos estudios (ignorados principalmente por programadores) que muestran que cosas como el uso de guiones bajos, nombres lógicos, eliminación de abreviaturas y eliminación de elementos como prefijos tienen un gran impacto tanto en la comprensión como en la velocidad de trabajo con el código. Además, si usa prefijos para desglosar las tablas, ¿qué hace cuando varias áreas utilizan una tabla o, peor aún, comienza en una sola área pero luego comienza a usarse en otra área? ¿Ahora tiene que cambiar el nombre de la tabla?
Casi ignoro completamente la longitud de los nombres. Estoy mucho más preocupado por la legibilidad y la comprensión que por tomar una décima de segundo más para escribir un nombre de columna o tabla. Cuando también recuerdas todo el tiempo desperdiciado tratando de recordar si abrevieste "number" como "no", "num" o "nbr" y ten en cuenta el uso de cosas como Intellisense, usar nombres más largos y significativos es un obvio para mí.
Teniendo esto en cuenta, si su tabla UserEvents realmente tiene que ver con eventos relacionados con un usuario, entonces ese nombre tiene mucho sentido. El uso de solo eventos terminaría dándote una tabla mal nombrada porque el nombre no es lo suficientemente claro en mi opinión.
¡Espero que esto ayude!
Utilizaría esta notación, es decir, "UserEvent" en caso de que esta tabla sea una representación de la relación muchos a muchos entre las tablas "Usuario" y "Evento".
También evitaría usar prefijos para obtener significado de una lista ordenada alfabéticamente. En general, es mala gestión de datos usar nombres de esa manera. Si las tablas están estrechamente relacionadas, entonces el software que administra el modelo de datos debería ser capaz de modelar las relaciones entre las tablas, independientemente de cómo se nombran las tablas.
Se debe usar un nombre como UserEvents cuando el contenido de cada fila describe una relación entre un usuario y un evento. Si veía una tabla de este tipo en una base de datos que era nueva para mí, esperaría ver una clave principal en esta tabla compuesta por dos claves externas, una para la tabla Usuarios y otra para la tabla Eventos.
Si veía algo diferente, tendría que reducir la velocidad hasta que entendiera la convención del diseñador.
Este último punto plantea algunas preguntas: ¿en casa se acercarán muchas personas nuevas a la base de datos? ¿Qué documentación tendrán esas personas disponible? ¿Qué tan importantes son esas nuevas personas para el éxito del proyecto que incluye la base de datos o el éxito del diseñador de la base de datos?