Формат первичного ключа для базы данных Oracle - PullRequest
1 голос
/ 19 марта 2012

Я хотел бы использовать буквенно-цифровой формат для первичного ключа, то есть A1 A2 A3 и иметь автоматическое увеличение.

Как я могу это сделать?это даже рекомендуется?

1 Ответ

6 голосов
/ 19 марта 2012

Вам нужно создать ПОСЛЕДОВАТЕЛЬНОСТЬ:

CREATE SEQUENCE your_seq
  MINVALUE 1
  MAXVALUE 999999999999999999999999999
  START WITH 1
  INCREMENT BY 1
  CACHE 20;

Затем вы используете:

INSERT INTO your_table
  (pk_column, ...)
SELECT 'A' || your_seq.NEXTVAL ...

Если вы хотите, чтобы это буквенно-цифровое значение также увеличивалось, создайте другую последовательность и используйте функцию CHR :

SELECT CHR(alpha_seq.NEXTVAL) || your_seq.NEXTVAL ...

Но я рекомендую сделать этот столбец суррогатным ключом и использовать значение последовательности для фактического столбца первичного ключа:

INSERT INTO your_table
  (pk_column, surrogate_key, ...)
SELECT your_seq.NEXTVAL,
       'A' || your_seq.NEXTVAL ...

... потому что VARCHAR2 займет больше байтов, чем NUMBER. Это будет иметь значение при объединении таблиц и позволит гибко изменять суррогатный ключ без ущерба для ссылочной целостности (IE: B1, B2, B3 ...).

...