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_ATONinterna 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,
2038com 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
ENUMs longos podem ser separados em um tipo de dados personalizado, para queDESCRIBEa 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_ATONfunção.
O MS SQL parece ter algo dessa natureza , mas eu gostaria de saber se é mais do que apenas um sinônimo. (por exemplo, booleanpoderia ser um sinônimo para tinyint(1), ou postal_codepara um de charou varchar (5ou 9ou 10)) Sinônimos não são o que estou perguntando aqui.
IPv6em um binary(16), ou é limitado a aliasing (que poderia ser usado para states tornando-se enums)
intvontade 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.