(Enterprise Architectなどのツールを使用して)データベーステーブルを設計するときに、将来別のデータベースに切り替える必要がある場合に、すべてのデータベースで機能する「ユニバーサル」データ型のみを使用するにはどうすればよいですか?切り替え中、新しいデータベースで利用できない列のデータ型を、新しいデータベースで利用できる適切なデータ型に変更しないようにしたいと思います。
つまり、すべてのデータベースで同じサイズで機能するANSIデータ型はありますか?つまり、「ANSI SQL」と同様に、「ANSI SQLデータ型」のようなものはありますか?
最も基本的なデータ型の場合、ほぼすべてのDBMSがANSIデータ型を直接サポートするか、少なくともそれらを指定できます。
次のステートメント:
create table products
(
product_id integer not null primary key,
product_name varchar(100),
price decimal(10,2)
);
ほぼすべてのDBMSで動作します。ただし、データタイプはDBMS固有のデータタイプに変換されます(たとえば、integer
はOracleではnumber
に、またはvarchar
はvarchar2
に変更されます)。
CLOB、BLOB、XML、Json、または地理空間タイプなどの「高度な」データ型については、これは当てはまりません(CLOB、BLOBはかなり一般的ですが、たとえばPostgresでは理解できませんが、より互換性を持たせるために、その名前のドメインまたはユーザーデータ型)。
ANSI規格で定義されている基本的なデータ型は次のとおりです。
すべてのDBMSがそれらすべてをサポートするわけではありません(MySQLには間隔データ型がありません。MySQLとSQL Serverにはrealブール型がありません。Oracleブール型をまったく持たないか、実際のDATEまたはTIMEデータ型を持たない。Postgresにはnchar
がありません-リストは何度も続く可能性があります)。しかし、最も一般的なものは通常非常にうまく機能します。
私の経験から、次のものは異なるDBMS全体で(大きな)問題なしに機能します(ただし、my経験-これは完全または明確なリストではありません!)
これらに固執する場合、あなたはかなり「普遍的」ですが、DBMS間を移動するとき、何か他のものは(不快な)驚きを与えます。
Oracleは奇数である傾向があり、「NUMBER」はビット、ショート、整数、ロング、10進数、および浮動小数点をカバーします。また、大きなテキストにはCLOBとNCLOBを使用し、SQL Serverで使用されるIMAGEの代わりにBLOBを使用します。