Ваша таблица имеет составной первичный ключ:
CREATE TABLE branch_dim (
PRIMARY KEY (branch_id,island_name)
Следовательно, любая ссылка внешнего ключа на эту таблицу также должна использовать оба элемента для своего внешнего ключа (необходимо указать ключ, весь ключ и ничего, кроме ключа - так что помогите вам Codd: -):
CREATE TABLE order_fact (
branch_id numeric(18,0) NOT NULL,
island_name char(30),
product_id numeric(18,0) NOT NULL,
order_id numeric(18,0) NOT NULL,
day_id numeric(18,0) NOT NULL,
FOREIGN KEY (branch_id, island_name)
REFERENCES branch_dim (branch_id, island_name)
Совет: для чего-либо длиннее 5 символов или около того никогда использовать CHAR(x)
в качестве типа данных - это создаст поле длиной всегда 30 символов - сохраняете ли вы в нем столько символов или нет.Если вы храните меньше, значение дополняется пробелами до определенной длины (30 символов).
Для любых символов, длина которых превышает 5, я бы рекомендовал всегда использовать VARCHAR
вместо этого!
То же самое относится и к numeric(18,0)
: для поля ID
я бы всегда использовал INT
- гораздо приятнее, чище, меньше, просто лучше!