¿MySQL tiene algún soporte para tipos de datos personalizados? Por ejemplo, los códigos postales se pueden almacenar en un varchar(10)campo, pero se pueden compactar en un int, con opciones de espacio en blanco, y un indicador de si se trata de un código postal de 5 dígitos o 5 + 4 dígitos.
¿Hay alguna manera de instalar tipos de datos sin problemas para tales cosas? En lo que respecta a la aplicación, sería un tipo de cadena, simplemente habría truncamiento de datos (con o sin advertencia), si la aplicación pasara datos no válidos.
Se podrían utilizar funciones personalizadas (por ejemplo, hay una función integrada INET_ATONpara las direcciones IPv4. Pero eso no permite cosas como las zip LIKE '12345%'que deberían indexarse correctamente. Un soporte bien escrito para los tipos de datos personalizados permitiría marcar un tipo de datos como ordenable. Así que el compacto zip int, cuando se clasifica, se clasificaría como si fuera un zip varchar(10).
Esto permitiría que la columna tuviera un ancho fijo, permitiría que el almacenamiento variable de 6 o 10 bytes se redujera a 4 byes de ancho fijo.
Hay varios usos aplicables.
- Códigos ZIP
- Direcciones IPv6
- Campos de marca de tiempo personalizados con precisión de nivel de minutos y capacidad más allá
2038con menos uso de almacenamiento quedatetime, pero no es necesario admitir fechas antes del año de implementación (digamos que el mínimo podría ser 2007 si esas son las fechas más antiguas del sistema) - Marcas de tiempo que implementan DST (que no parecen existir )
- El estado estadounidense de dos letras se puede almacenar en un solo byte
- los
ENUMs largos se pueden separar en un tipo de datos personalizado para queDESCRIBEla salida no se vea tan desordenada con todo el ajuste.
Espero que los manejadores de tipos de datos se almacenen de forma similar a la forma en que se almacenan las funciones.
¿Hay algo remotamente como esto en algún motor de base de datos? Principalmente uso MySQL, pero tengo curiosidad por saber si alguna vez se ha implementado, a menos que la aplicación llame a una función como la INET_ATONfunción.
MS SQL parece tener algo de esa naturaleza , pero me gustaría saber si es más que un sinónimo. (por ejemplo, booleanpodría ser un sinónimo de tinyint(1), o postal_codepara uno de charo varchar (5o 9o 10)) Los sinónimos no son lo que estoy preguntando aquí.
IPv6en a binary(16), o se limitará a alias (que podría usarse para stateconvertirse en enums)
intlo hará no trabajo para una base de datos internacionalizado - Canadá, por ejemplo, utiliza el formato de 'A9a A9a'. Crear un tipo de datos personalizado para códigos postales es probablemente una buena idea; sin embargo, es posible que desee volver a examinar cómo planea lidiar con algunos de ellos (por ejemplo, almacenar el estado en un campo de un solo byte tiene problemas potenciales de "otros"). Y no vuelva a implementar los tipos de datos de fecha / hora, a menos que los proporcionados sean inusualmente deficientes (el tamaño no cuenta), solo confundirá a las personas.