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')
);
На самом деле до сих пор существует некоторая плохая практика. Во-первых, имя ограничения - это делает жизнь проще:
, constraint mt_pk primary key (mamuathi, id)
, constraint mt_ck check(mamuathi = 'MT')
Два, если mamuathi
является действительно постоянной бессмысленно использовать его в ключе:
, constraint mt_pk primary key (id)
Три, 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')
);