<code>Entonces que me impide declarar todas las cadenas de texto como VARCHAR? y que simplemente se modifique por si solo? </code>

Juan José Calderón

Juan José Calderón

Pregunta
studenthace 5 años

Entonces que me impide declarar todas las cadenas de texto como VARCHAR? y que simplemente se modifique por si solo?

6 respuestas
para escribir tu comentario
    Irwin Enrique Villalobos López

    Irwin Enrique Villalobos López

    studenthace 5 años

    La ventaja de

    VARCHAR
    respecto a
    CHAR
    es que el tamaño de la memoria que reserva para guardar la información es dinámico. Supón que desconoces el tamaño de la cadena y usas
    CHAR
    . Entonces tendrías que estimar una cota superior para el tamaño de la cadena. Por ejemplo, podrías suponer que la longitud de la cadena no superará los 100 caracteres. Entonces usas el tipo de dato
    CHAR(100)
    . Si llega una cadena a la base de datos de tamaño 10 estarías desperdiciando el espacio de 90 caracteres en la memoria. Este espacio no lo desperdiciarías si usaras
    VARCHAR
    . Además
    VARCHAR
    te permite modificar el largo de la cadena, hacerlo más corto o más largo y la memoria reservada que se requiere se adaptaría.

    En cambio si tú ya conoces la longitud de la cadena (por ejemplo, en Among Us las claves para las salas siempre tienen 6 caracteres), entonces usas

    CHAR
    . Te conviene hacerlo de esta manera porque
    VARCHAR
    no sólo reserva memoria para guardar los caracteres cadena, sino que también para guardar otros atributos (por ejemplo, en algún lugar de la memoria debe de guardar el tamaño de la cadena). Así que en estos casos ahorras más memoria usando
    CHAR
    porque así no tienes que guardar en memoria esos atributos extra.

    Helí Fernando Jerez Rincón

    Helí Fernando Jerez Rincón

    studenthace 5 años

    El problema esta en que las bases de datos se almacenan en bloques de memoria y de disco y no todas las bases de datos optimizan sus tipos de datos entonces si sabes de antemano el tipo de dato que necesitas es mejor usar ese tipo de dato, para que el I/O o búsqueda en disco sea eficiente porque la bd almacenará más información por bloques. Esta es una regla importante al diseñar modelos para cualquier base de datos.

    Juan José Calderón

    Juan José Calderón

    studenthace 5 años

    Ok, si te entiendo. Entonces el VARCHAR no se usaria tanto. Es mas fail usar CHAR y TEXT simplemente. Osea no le veo la utilidad del VARCHAR. O incluso no le veo la importancia a que haya un CHAR y un VARCHAR. Con que existiera uno de los dos, sea el que sea, funcionaria igual. No crees?

    Enrique Devars

    Enrique Devars

    teacherhace 5 años

    Esto tiene que ver con un concepto de la programación llamado espacio reservado de memoria. Cuando creas una variable es como si crearas una cajita virtual, dependiendo lo que vayas a guardar es el tamaño que va a tener esta caja. Al hecho de crear una variable con un tamaño definido se le llama reservar espacio de memoria.

    En las bases de datos nosotros al definir un tipo de dato, definimos el tamaño de la cajita que usaremos. Imagina que defines que el campo de un una matricula de carro siempre va a medir 8 caracteres, entonces podemos usar un Char(8). Cada cajita que se cree dentro de nuestra bases de datos siempre va a medir 8 espacios.

    Ahora imagina que quieres guardar un dato como un nombre, pero por error de diseño decides que vas a usar un Varchar(255). Un nombre es muy raro que pueda alcanzar 255 caracteres. Lo que pasaría en la base de datos es que si el nombre más largo que vas a ingresar supón que mide 50 caracteres, cada registro que se haga siempre va a medir 255 (del Varchar), pero tú a lo mucho solo ocupas 50, por lo cual se estarían desperdiciando 205 espacios de memoria.

    Si esto lo haces cada vez que se crea un nuevo nombre, por ejemplo otro nombre que solo mide 15 caracteres, se desperdiciarían ahora 240 espacios en memoria. Si esto se hace consecutivamente habrá mucho espacio de memoria que no estás utilizando volviendo tu base de datos ineficiente.

    espacioreservado.png

    Juan José Calderón

    Juan José Calderón

    studenthace 5 años

    OK, osea entendia que de pronto en almacenamiento se vería afectado pero exactamente porque? si el VARCHAR al final si le voy a ver el tamaño solo ocupará lo mismo que un CHAR(X) del tamaño X solo que con el VAR CHAR puede ser mas grande o mas pequeño sin cambiar de variable. No se si me hago entender. Si me puedes aclarar eso gracias

    Enrique Devars

    Enrique Devars

    teacherhace 5 años

    Hola, recuerda que debes pensar en la eficiencia de tu base de datos, si hay cadenas de texto que solo tienen un número definido de caracteres es mejor usar Char(n), y si tienes una cadena que sea mayor a 255 caracteres debes usar Text.

    Si tu base de datos llega a crecer mucho la eficiencia se verá afectada si no pensamos bien en el diseño.

Curso de Base de Datos [Empieza Gratis]

Curso de Base de Datos [Empieza Gratis]

Antes de utilizar cualquier tecnología para bases de datos debes entender los fundamentos de diseño y modelado requeridos para que tengas la mejor arquitectura posible. Crea tus propios modelos de bases de datos con las mejores prácticas desde cero.

Curso de Base de Datos [Empieza Gratis]
Curso de Base de Datos [Empieza Gratis]

Curso de Base de Datos [Empieza Gratis]

Antes de utilizar cualquier tecnología para bases de datos debes entender los fundamentos de diseño y modelado requeridos para que tengas la mejor arquitectura posible. Crea tus propios modelos de bases de datos con las mejores prácticas desde cero.