Ocupan espacio los campos vacíos de una db?

1,371 views
Skip to first unread message

ultraton500

unread,
Jun 21, 2012, 4:01:41 PM6/21/12
to publice...@googlegroups.com
Qué tal compañeros... alguna vez escuché decir que en algunos DBMS los campos vacíos no ocupan lugar mientras que en las tablas nativas si lo hacen. Ahora necesito saberlo pero no he podido encontrar información al respecto. Si alguien puede darme este dato le estaré muy agradecido.
Saludos,
Javier.

gonzal...@hotmail.com

unread,
Jun 21, 2012, 7:07:08 PM6/21/12
to Comunidad de Visual Foxpro en Español
En todas las baes de datos los espacios en blanco ocupan un lugar, eso
es debido a que los registros son de logitud fija, solo de esa forma
se puede tener acceso directo a un registro.

Victor Espina

unread,
Jun 21, 2012, 7:14:36 PM6/21/12
to publice...@googlegroups.com
Si hablas de DBFs, la respuesta es si. Si hablas de productos como SQL Server, Oracle o MySql, la respuesta es DEPENDE DEL TIPO DE DATOS.  Los campos VARCHAR, por ejemplo, ocupan solo el espacio requerido, mientras que los tipo CHAR ocupan siempre el mismo espacio sin importar si estan vacios o no.

En los primeros tiempos de RDBMS se recomendaba usar CHAR en lugar de VARCHAR para evitar el tiempo extra que el tomaba el motor navegar entre registros con distintas longitudes dentro de una tabla, pero esas consideraciones quedaron relegadas al pasado en los motores de bases de datos modernos.  

La regla que yo aplico es: si la lontigud del contenido del campo es fija, uso CHAR de lo contrario uso VARCHAR.  Por ejemplo, si tenemos una columna TIPO cuyos valor esta restringido a AB,NC,ND,CA, entonces lo logico es declararlo CHAR.  Los nombres y descripciones, por otro lado, deberian ser siempre VARCHAR.

Saludos

Victor Espina

Victor Espina

unread,
Jun 21, 2012, 7:17:13 PM6/21/12
to publice...@googlegroups.com
Gonzalo eso es solo cierto en tablas planas y almacenamiento basado en registros de longitud fija, como es el caso de los DBFs.

En las BDs modernas se maneja el concepto de que los registros pueden tener distintas longitudes (ver http://es.answers.yahoo.com/question/index?qid=20070423094137AARMM9p).

Saludos

Victor Espina

Hugo C.

unread,
Jun 21, 2012, 8:24:16 PM6/21/12
to Comunidad de Visual Foxpro en Español
Totalmente de acuerdo con lo que comenta Victor.

Saludos.
> > Javier.- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

Walter R. Ojeda Valiente

unread,
Jun 22, 2012, 12:30:31 AM6/22/12
to publice...@googlegroups.com
Si los campos los defines como CHAR(ACTER) entonces siempre ocupan la cantidad de bytes especificadas, sea que estén vacíos o no. Por ejemplo, si lo definiste con 50 caracteres entonces siempre ocupará 50 bytes.

Si los defines como VARCHAR entonces solamente ocupan la cantidad de caracteres más uno. Por lo tanto, si el campo está vacío ocupa un solo byte.

Saludos.

Walter.




Date: Thu, 21 Jun 2012 13:01:41 -0700
From: ultra...@gmail.com
To: publice...@googlegroups.com
Subject: [vfp] Ocupan espacio los campos vacíos de una db?

ultraton500

unread,
Jun 22, 2012, 12:47:30 AM6/22/12
to publice...@googlegroups.com
Les agradezco mucho por sus respuestas, mi duda ha sido muy bien aclarada.
Saludos cordiales,
Javier.

HernanCano

unread,
Jun 22, 2012, 4:02:54 AM6/22/12
to Comunidad de Visual Foxpro en Español

Chicos:
Recuerden que VFP --ahora en la 9-- también tiene VARCHAR, por lo
tanto "no es tan cierto" lo que se dice....

Conclusión:
En archivos de datos nativos en VFP9 se pueden definir campos VARCHAR
--así como en otros motores de bases de datos-- de manera que los
espacios "no usados" en los campos respectivos "no ocupen espacio" en
el disco duro.

---es más difícil tener que decirlo -escribirlo- que entenderlo---
---si la forma como lo escribo no es clara, lo siento: el tema es tan
fácil de entender que.... da rabia escuchar a los denigradores de Fox
expresar estas inexactitudes... tan fáciles de contradecir---

Carlos Miguel FARIAS

unread,
Jun 22, 2012, 7:45:59 AM6/22/12
to publice...@googlegroups.com
En vfp9 los varchar ocupan en disco su maxima extensión, la diferencia con un campo de caracteres es que cuando recuperas el dato, un campo de caracteres es retornado con la extensión completada con blancos y los varchar te devuelven solo la longitud de los datos guardados, sin completar con blancos al final.
En mysql, un campo varchar ocupa al menos 4 caracteres (este vacio o no).
Los sgbd guardan sus datos en nodos de x cantidad de caracteres (donde x depende de cada SGBD), dentro de esos nodos, acomodan tantos registros o partes de registros como corresponda por los datos contenidos (casi todos los SGBD guardan los datos memo, blob, etc. en archivos o areas aparte).
Los datos se acomodan en esos nodos de diferente forma, dependiendo del SGBD.
Por ejemplo en SQL Server, si tiene un indice de racimo (cluster), los datos se ubican en los nodos siguiendo el orden del indice cluster y no apilado al final.
Una de la ventaja de fox con sus tablas es que los archivos de datos, son planos con registros de longitud fija, por lo que permite acceso por número de registro, lo que a su vez puede, usandose apropiadamente, un tiempo de respuesta muy bueno.
Eso además permite que los indices, que apuntan a ese archivo plano, de acceso directo, sea muy efectivo accediendo por cualquier indice.
En cambio, en el caso de SQL Server, el indice cluster es superefeciente, pero los otros indices, apuntan al indice cluster, o sea que es un acceso en dos pasos.
Saludos: Miguel, La Pampa (RA)
Reply all
Reply to author
Forward
0 new messages