O MySQL tem suporte para tipos de dados personalizados? Por exemplo, os códigos postais podem ser armazenados em um varchar(10)
campo, mas podem ser compactados em um int
, com opções para em branco e um sinalizador para saber se é um código postal de 5 ou 5 + 4 dígitos.
Existe uma maneira de instalar tipos de dados contínuos para essas coisas? No que diz respeito à aplicação, seria um tipo de string, haveria simplesmente truncamento de dados (com ou sem aviso), se a aplicação passasse dados inválidos.
Funções personalizadas podem ser usadas (por exemplo, existe uma função INET_ATON
interna para endereços IPv4. Mas isso não permite coisas zip LIKE '12345%'
que devem ser indexadas corretamente. Um suporte bem escrito para tipos de dados personalizados permitiria que um tipo de dados fosse marcado Assim, o compacto zip int
, quando classificado, classificaria como se fosse um zip varchar(10)
.
Isso permitiria que a coluna tivesse largura fixa, permitiria que o armazenamento variável de 6 ou 10 bytes fosse reduzido a 4 bytes de largura fixa.
Existem vários usos aplicáveis
- CEP
- Endereços IPv6
- Campos de carimbo de data / hora personalizados com precisão e capacidade em nível de minuto além,
2038
com menos uso de armazenamentodatetime
, mas não há necessidade de oferecer suporte a datas antes do ano de implementação (digamos que o mínimo poderia ser 2007 se essas forem as datas mais antigas do sistema) - Carimbos de data e hora que implementam o horário de verão (que parecem não existir )
- O estado americano de duas letras pode ser armazenado em um único byte
ENUM
s longos podem ser separados em um tipo de dados personalizado, para queDESCRIBE
a saída não seja tão confusa com todo o agrupamento.
Espero que os manipuladores de tipo de dados sejam armazenados de maneira semelhante à maneira como as funções são armazenadas.
Existe algo remotamente parecido com isso em qualquer mecanismo de banco de dados? Eu uso principalmente o MySQL, mas estou curioso para saber se isso já foi implementado, menos que o aplicativo chame uma função como a INET_ATON
função.
O MS SQL parece ter algo dessa natureza , mas eu gostaria de saber se é mais do que apenas um sinônimo. (por exemplo, boolean
poderia ser um sinônimo para tinyint(1)
, ou postal_code
para um de char
ou varchar
(5
ou 9
ou 10)
) Sinônimos não são o que estou perguntando aqui.
IPv6
em um binary(16)
, ou é limitado a aliasing (que poderia ser usado para state
s tornando-se enum
s)
int
vontade não trabalho para um banco de dados internacionalizada - Canadá, por exemplo, usa o formato de 'A9A A9A'. Criar um tipo de dados personalizado para CEPs provavelmente é uma boa idéia; no entanto, você pode reexaminar como planeja lidar com alguns deles (o armazenamento do estado em um campo de byte único tem possíveis outros problemas, por exemplo). E não reimplemente tipos de dados de data / hora, a menos que os fornecidos sejam inadequadamente inadequados (o tamanho não conta) - você apenas confundirá as pessoas.