Используйте «справочную таблицу», когда вам нужно: а) ограничить диапазон значений в столбце и б) изменить диапазон значений во время выполнения.
В настоящее время для каждой строки таблицы хранится это поле payment_type.
как текст Теперь лучше сохранить это значение в виде текста или сделать поиск
таблицу для него и сохранить внешний ключ обратно в таблицу транзакций?
Вы, кажется, смешиваете две разные и не связанные идеи.
- Использование «справочных таблиц» (которые я считаю сокращенными для «таблиц и ограничений внешнего ключа»).
- Замена текста идентификационными номерами.
Чтобы создать «справочную таблицу» для ограничения диапазона значений «payment_type» в таблице «транзакции», вы можете просто сделать это.
create table payment_types (
payment_type varchar (35) primary key
);
insert into payment_types
select distinct payment_type
from transactions;
alter table transactions
add constraint constraint_name
foreign key (payment_type)
references payment_types (payment_type);
Когда вы говорите о денежных операциях, вы можете не захотеть каскадно обновлять или удалять. Риск большого, колоссального урона довольно высок.
Если вы испытываете желание уменьшить ширину таблицы транзакций, рассмотрите небольшой код CHAR () вместо целого числа. Код, понятный человеку, избегает объединения. В вашем случае я мог бы использовать «cc», «dc» и «it». Но я бы сделал это только после анализа всех известных типов платежей. (Известные бухгалтерам, а не только те, кто известен разработчикам баз данных, и не только те, которые используются в вашей конкретной компании.)
create table payment_types (
payment_type_code char(2) primary key,
payment_type_desc varchar(35) not null unique
);
Если код CHAR (2) не покрывает ваши ожидаемые значения, используйте целое число и заплатите цену объединения, чтобы получить читабельные значения.