PostgreSQL(またはそれをサポートする他のいくつかのデータベース)を使用する場合は、character varying(NN)
よりもTEXT
データ型を使用するほうがよいようです。パフォーマンスが低下することはなく、可能な最大長であるためです。フィールドを使用するビューなどに影響を与えることなく、制約を削除して再適用することで調整できます。
しかし、この制約はどのように適用されますか(SQLコード)?
テーブルを作成すると、このようなことを行うことができます。
CREATE TABLE names (
name text CHECK namechk (char_length(name) <= 255)
)
(namechk
は制約の名前です)
同じことがALTER TABLE
例えば:
ALTER TABLE names
ADD CONSTRAINT namechk CHECK (char_length(name) <= 255);
ここには本当に3つのことがあります。
text
+チェック制約、またはvarchar(N)
を使用する方が良いですか?答え:
varchar(N)
は、スキーマを検査するとき、および他のDBから来ている開発者が何を期待するかをより明確にするでしょう。しかし、あなたが言うように、後で変更するのは難しいです。新規または変更されたチェック制約の適用は自由ではないことに注意してください。既存のすべての行を制約に対してチェックする必要があるため、大きなテーブルでは大量の読み取りが必要です。CREATE TABLE
_ステートメントのCONSTRAINT name CHECK (condition)
(またはCHECK (condition)
とPostgres自体に名前が付けられる)とALTER TABLE table_name ADD CONSTRAINT name CHECK (condition);
です。 condition
は、適切な 文字列関数 を使用した式になります。 char_length(foo) <= 255
。ALTER TABLE foo DROP CONSTRAINT ck_bar_length; ALTER TABLE foo ADD CONSTRAINT ck_bar_length CHECK ( char_length(bar) <= 100 );
のようになります。制約に名前を付けることの欠点を実際に考えることはできません。