usar una tablas reglas para normas nomenclatura nombres nombre nombrar los las hora escribir diseñar datos crear costumbre convencion como campos buena database-design schema

database-design - una - normas para crear tablas en sql



¿Prefijo cada nombre de campo en una tabla con el nombre abreviado de tabla una buena práctica? (14)

Cuando agrego el campo "ordinal" a una tabla, me gusta agregar un prefijo para no tener que aliar los campos ordinales de otras tablas en JOINS. Es útil para UNIRSE a veces ... no estoy seguro de haber visto otros beneficios.

MediaWiki (el software de Wikipiedia) usa esa convención. Descargue la fuente. Se limitan a un prefijo de dos caracteres.

No recomiendo la práctica sin embargo. Para la mayoría de las bases de datos no es necesario.

¿Prefijo cada campo en una tabla con el nombre abreviado de la tabla?

Ejemplo:

Table: User Fields: user_id user_name user_password

¿O lo haces nombrar tus campos mínimamente?

Fields: id name password

Si ha utilizado ambos, ¿qué formato cree que le ayudó más a largo plazo?

Editar: esta pregunta no parece tener una respuesta definitiva y ambas partes presentan buenos puntos. Pero he mantenido la pregunta abierta durante demasiado tiempo y tal vez es hora de marcar una respuesta como aceptada. Por lo tanto, estoy marcando el más votado como aceptado.


Es una práctica increíble :

  1. Usted ve lo que significa cada campo, al menos en qué dominio es. No puede determinar qué significa amount ( transactions , incomes ), a menos que sean xac_amount e inc_amount . La mayoría de las herramientas de consulta no generan alias junto con el nombre del campo.
  2. Puede usar alias de tablas, seguro. Pero SQL no los requiere, y según la ley de Murphy, si no se requiere, no se usará. No hay un estándar, por lo que un desarrollador usará x como un alias para la transaction , otro usará tran y así sucesivamente.

De hecho, los prefijos son simplemente alias forzados de tablas, por lo que puede ver fácilmente qué campo pertenece a qué tabla.


Está bien nombrar los campos de esa manera (mínimamente), pero para la clave principal y los subtítulos / nombre. Si consistentemente nombra su clave principal como ID y su nombre es Name, la construcción de consultas degenerará en alias superfluos:

select i.id as invoice_id v.id as vendor_id, p.id as product_id, v.name as vendor, p.name as product, b.name as branch, c.name as parcel, i.total_amount, i.discount, i.invoice_date from invoice i join product p on i.product_id = p.id join vendor v on i.vendor_id = v.id join branch b on i.branch_id = b.id join parcel c on i.parcel_id = c.id

Como unir tablas y mostrar el título / título de la entidad es la norma en lugar de la excepción, nombro mi clave principal en forma completa y, para el campo de título / nombre, el mismo nombre que el nombre de la tabla.

create table product ( product_id uuid not null, -- primary key product text not null, bar_code text not null default '''', rfid_code text not null default '''', current_qty int default 0 ); create table vendor ( vendor_id uuid not null, -- primary key vendor text not null, is_active boolean not null default true ); create table branch ( branch_id uuid not null, -- primary key branch text not null, sub_branch_of_id uuid, current_sales money not null default 0, ); create table user ( user_id uuid not null, -- primary key user text not null, password text not null default '''' );

Por lo tanto, su consulta no tendrá alias superfluos:

select i.invoice_id, p.product_id, v.vendor, p.product, b.branch, c.parcel, i.total_amount, i.discount, i.invoice_date from invoice i join product p on o.product_code = p.product_code join vendor v on o.vendor_code = v.vendor_code join branch b on o.branch_code = b.branch_code join parcel c on o.parcel_code = c.parcel_code


La variante de prefijo simplemente toma más tiempo para escribir y hace más difícil leer sentencias SQL con muchos campos.

Incluso cuando selecciona desde varias tablas, esto le brinda solo el beneficio de no tener que prefijar campos ambiguos con el nombre de la tabla. Pero

SELECT user.name, image.name FROM user, image

no es muy diferente de

SELECT user_name, image_name FROM user, image

El beneficio de no tener campos ambiguos en sus consultas se consume rápidamente por la sobrecarga de tener que escribir el nombre de la tabla cada vez que usa un nombre de columna.


No hagas eso. Es redundante y lleva a la frustración en el largo plazo.

El único campo donde podría aplicar esto podría ser id , porque user_id sería obviamente la identificación del usuario y simplificaría la escritura de uniones en SQL. Pero ni siquiera haría eso.


Personalmente, en la tabla ''usuario'', mi columna sería ''id''.

Pero cualquier columna de clave antigua en diferentes tablas que apuntan a esa columna, llamaría a la columna ''user_id''.

entonces puedes terminar con algo como esto:

select * from order inner join user on user.id=order.user_id


Poner el prefijo en los nombres de las columnas puede ser una buena práctica. Si está trabajando en una base de datos formal (y probablemente grande) y está prestando atención a ISO 11179 (particularmente el concepto de nombres de elementos de datos), entonces es bueno poner los tres (o cuatro) nombres completos de la parte en: Objeto - Propiedad - Término de representación. (La cuarta parte opcional es un calificador). Por ejemplo, "user_first_name". De esta forma, tiene coherencia entre su diccionario de datos y el esquema de la base de datos. No haría esto para bases de datos más pequeñas por las razones ya comentadas, pero en un esquema complejo esto reduce el riesgo de error.


Por todas las razones dadas, no creo que esta sea una buena idea. Además, no prefijas todos los métodos de tus clases con los nombres de las clases, ¿verdad? Entonces, ¿por qué hacerlo para los objetos de la base de datos?


Tampoco usamos prefijos abreviados de tabla normalmente y tampoco lo aconsejaría.

Sin embargo, hay una situación en la que lo hacemos: reservar campos .

e.g. OH_Reserve_Field_Alpha3 in table ORDER_HEADER

Fondo corto: nuestra base de datos tiene más de 250 tablas y colocamos en la mayoría de ellas columnas de reserva para usarlas en futuras implementaciones de características. Como se puede imaginar, sin prefijo terminaría teniendo 50 Reserve_Field_Alpha3''s con un significado totalmente diferente pero con el mismo nombre en todo su código. Ya es difícil como lo es ahora, pero sin prefijos sería peor.


Yo no lo haría Si desea la información a qué tabla pertenece un campo, siempre puede escribir sus consultas como

select user.id, user.name from user where ...

Pero imagine que decide por alguna razón cambiar el nombre de una de sus tablas (tal vez de ''usuario'' a ''cliente''). Tendría que cambiar el nombre de todos los campos para mantener la coherencia.

Mi opinión: no hay una buena razón por la que debas hacerlo, y varias buenas razones para no hacerlo.


si lo haces, terminarás escribiendo consultas como:

SELECT user.user_name, user.user_password, user.user_firstname ...

en lugar de

SELECT user.name, user.password, user.firstname

Entonces, la respuesta a tu pregunta es bastante clara.


Recomiendo seguir con alias de tabla, como:

SELECT user.id, user.email, user.firstname, user.secondname, avatar.filename FROM pain_in_the_butt_table_name user LEFT JOIN table_with_the_avatars avatar ON avatar.user_id = user.id

Las ventajas:

  • mantener una lista fácilmente comprensible de los campos que seleccione y de qué tablas los saca

  • evite escribir largas o difíciles para comprender los nombres de las tablas y reemplácelas con un nombre breve y comprensible (que debería haber hecho al crear la tabla)

  • realizar uniones legibles (su ejemplo sería:

LEFT JOIN table_with_the_avatars.user_id ON user.user_id = table_with_the_avatars.avatars_user_i

  • cree alias más cortos, en mi ejemplo que significaría u en lugar de usuario, y a en lugar de avatar, acortando su consulta

Si está utilizando un PREFIJO ÚNICO para cada tabla, entonces

  • No es necesario usar un alias para combinaciones (excepto auto unión)
  • Todas las columnas en la base de datos deben ser únicas en el nombre
  • Puede identificar fácilmente la tabla desde el nombre de la columna en sí (desde una consulta de salida o selección)

No es necesario que lo hagas más, y realmente no deberías hacerlo. La única excepción señalada por saua podría ser el campo ID para buscar la claridad de las uniones.

El concepto de prefijo de nombres de campo con el nombre de la tabla proviene del antiguo sistema heredado cuando cada campo en toda la base de datos tenía que ser único.

Por lo tanto, a menos que trabaje con sistemas heredados que requieren que cada campo en toda la base de datos tenga un nombre único; no lo hagas.