web-dev-qa-db-ja.com

カスタムデータ型などはありますか?

MySQLはカスタムデータ型をサポートしていますか?たとえば、郵便番号はvarchar(10)フィールドに格納されますが、空白のオプションと5桁かどうかに関するフラグを使用して、intに圧縮できます。または5 + 4桁の郵便番号。

そのようなもののためにシームレスなデータ型をインストールする方法はありますか?アプリケーションに関する限り、それは文字列型であり、アプリケーションが無効なデータを渡した場合、データの切り捨て(警告の有無にかかわらず)が発生します。

カスタム関数を使用することもできます(たとえば、IPv4アドレスには組み込み関数_INET_ATON_があります。ただし、これは_Zip LIKE '12345%'_などを適切にインデックス付けする必要があります。カスタムのサポートデータ型を使用すると、データ型を並べ替え可能としてマークできます。したがって、コンパクトな_Zip int_を並べ替えると、Zip varchar(10)であるかのように並べ替えられます。

これにより、列を固定幅にすることができ、6バイトまたは10バイトの可変ストレージを固定幅の4バイトに切り詰めることができます。

いくつかの適用可能な用途があります

  • 郵便番号
  • IPv6アドレス
  • 分のレベルの精度と容量が_2038_を超え、datetimeよりもストレージの使用量が少ないカスタムタイムスタンプフィールド。ただし、実装年より前の日付をサポートする必要はありません(最も古い場合、最小値は2007である可能性があります)システムの日付)
  • DSTを実装するタイムスタンプ(これは 存在しないようです
  • 2文字の米国の州を1バイトに格納できます
  • long ENUMsはカスタムデータタイプに分離できるので、DESCRIBEの出力はすべてのラッピングでそれほど乱雑に見えません。

データ型ハンドラーは、関数の格納方法と同様に格納されると思います。

データベースエンジンに、リモートでこのようなものはありますか?私は主にMySQLを使用しますが、これが実装されているかどうか、アプリケーションに_INET_ATON_関数のような関数を呼び出さない限り、興味があります。

MS SQLにはそのような性質があるようです ですが、単なる同義語ではないかどうか知りたいです。 (たとえば、booleantinyint(1)の同義語、またはcharまたはvarchar _postal_code_のいずれかの_(5_または_9_または_10)_)同義語は、私がここで求めているものではありません。

14
Bryan Field

MySQLはカスタムデータ型をサポートしていますか?

簡単な答え:いいえ

データベースエンジンに、リモートでこのようなものはありますか?私は主にMySQLを使用していますが、これが実装されているかどうか、アプリケーションがINET_ATON関数のような関数を呼び出さない限り、私は興味があります。

Oracleには _CREATE TYPE_ があります。これは、OOクラスに類似しています。メンバー関数や 継承

Postgresには _CREATE TYPE_ があり、OOクラス(メンバー関数または継承なし))とは少し異なりますが、非常に柔軟で便利です。新しいベースタイプを作成することもできます。継承またはサブタイピングの形式を許可し、基本的にいくつかの制約付きでベースタイプを拡張する _CREATE DOMAIN_ もあります。 inetgeometric 型など、デフォルトで興味深い基本型もいくつかあります。Postgresでは、Cで拡張機能を記述できますこの例の base36データ型 を使用したカスタムデータ型の場合.

SQL Serverには _CREATE TYPE_ があり、既存のシステムデータタイプに基づいてカスタムデータタイプを作成できます。たとえば、基本的にVARCHAR(11)として定義されるSSNと呼ばれる型を作成できますが、これにより、フィールドの大きさを覚える必要がなくなります。

Firebirddomains によるソリューションもあります。

Firebirdでは、「ユーザー定義のデータ型」の概念はドメインの形で実装されています。もちろん、ドメインを作成しても、新しいデータ型は作成されません。ドメインは、既存のデータ型を一連の属性でカプセル化し、この「カプセル」をデータベース全体で複数回使用できるようにする手段を提供します。複数のテーブルが同一またはほぼ同一の属性で定義された列を必要とする場合、ドメインは理にかなっています。

ドメインの使用は、テーブルとビューの列定義に限定されません。ドメインを使用して、PSQLコードで入力および出力パラメーターと変数を宣言できます。

0
Tibor