Klien saya memiliki model bisnis yang berubah secara dinamis, mereka menjual produk sesuai dengan nilai tukar USD harian, ini berarti harga produk berubah setiap hari dan klien tetap ingin menyimpan riwayat (harga, tanggal_terjual) produk yang terjual (info ini disimpan di tabel pesanan).
Satu-satunya cara yang dapat saya pikirkan untuk menerapkan solusi untuk klien saya adalah dengan menggunakan versi baris. (Mereka menggunakan MySQL sebagai server database)
Ini adalah skema saat ini (seperti prototipe) yang ingin saya terapkan dengan tetap menjaga integritas referensial, namun ketika saya membuat tabel pesanan saya mendapatkan kesalahan sebagai berikut:
ERROR 1005 (HY000): Can't create table 'mydb.orders' (errno: 150)
Berikut desain skemanya:
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;
Mengapa saya tidak dapat membuat kunci asing ke tabel produk? Apa yang saya lakukan salah?
Setiap saran sangat dihargai,
Terima kasih!
Untuk diketahui
Pengaturan Server Basis Data
- Percona MySQL 5.5.27
- Saya menangani pembuatan versi di db_layer saya dengan menggunakan stempel waktu dan flag boolean
UPDATE : Saya harus membuat indeks pada kolom pesanan(prod_id), definisi skema yang benar untuk tabel pesanan adalah :
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;