我的一个客户有一个动态变化的商业模式,他们根据每日美元汇率销售产品,这意味着产品的定价每天都在变化,客户仍然希望保留已售产品的历史记录(价格,日期_已售) (此信息保存在订单表中)。
我能想到为我的客户实施解决方案的唯一方法是使用行版本控制。(他们使用 MySQL 作为数据库服务器)
这是我想要在保持引用完整性的同时实现的当前模式(就像原型一样),但是当我创建订单表时,我收到如下错误:
ERROR 1005 (HY000): Can't create table 'mydb.orders' (errno: 150)
特此架构设计:
create table products (
id int not null auto_increment,
prod_id int not null,
name varchar(200) NOT NULL,
price decimal(8,2) NOT NULL default 0,
is_active boolean default 0,
deleted boolean default 0,
create_date timestamp NOT NULL default current_timestamp,
end_date timestamp NOT NULL default '2030-01-01 00:00:00',
primary key(id)
)engine=innodb;
create table orders (
id int not null auto_increment,
prod_id int not null,
foreign key(prod_id) references products(prod_id),
date_sold timestamp NOT NULL default current_timestamp,
primary key(id)
)engine=innodb;
为什么我无法为产品表创建外键?我究竟做错了什么?
非常感谢任何建议,
谢谢!
供参考
数据库服务器设置
- Percona MySQL 5.5.27
- 我使用时间戳和布尔标志在我的 db_layer 中处理版本控制
更新: 我必须在 orders(prod_id) 列上创建一个索引,orders 表的正确模式定义是:
create table orders (
id int not null auto_increment,
prod_id int not null,
index product_id(prod_id),
foreign key(prod_id) references products(prod_id),
date_sold timestamp NOT NULL default current_timestamp,
primary key(id)
)engine=innodb;