mamuathi = MT + auto_increment;
そのようにテーブルを構成しないでください。これがスマート キー (複数のコンポーネントが連結された単一の文字列) です。スマートキーはばかげています。"MT" が重要な場合 (ハードコードされた変更されない要素を持つキーが必要なのはなぜですか?)、それを別の列にします。
CREATE TABLE mua_thi ( mamuathi varchar2(2) not null
, id number (8) not null
, primary key (mamuathi, id )
, check(mamuathi = 'MT')
);
実際にはまだいくつかの悪い習慣があります。1 つ目は、制約に名前を付ける - 作業が楽になります。
, constraint mt_pk primary key (mamuathi, id )
, constraint mt_ck check(mamuathi = 'MT')
2 つ目は、mamuathi
が本当に定数である場合、キーで使用しても意味がありません。
, constraint mt_pk primary key ( id )
3 つ目は、 mamuathi
複数の値に発展する可能性があるため、ルックアップ テーブルへの外部キーの方が適切かどうかを検討してください。
明らかに、スマート キーを分割することの欠点は、複数の列を参照する必要があることです。11g では、仮想列機能を使用してその不便さを回避できます。
CREATE TABLE mua_thi ( mamuathi varchar2(2) not null
, id number (8) not null
, mamuathi_disp AS mamuathi||lpad(id,8,'0')
, primary key (mamuathi, id )
, check(mamuathi = 'MT')
);