Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Butuh bantuan merancang struktur db faktur saya

Anda tidak dapat menghapus produk setelah ditentukan, jadi tambahkan bidang Status ke produk yang - dalam contoh ini saya menggunakan enum, meskipun itu bisa dengan mudah menjadi INT atau satu set bool (yaitu Diarsipkan), saya gunakan Tabel Enumerasi Parameter untuk ini tapi itu jawaban yang terpisah.

Yang paling penting adalah memastikan bahwa baris faktur memiliki harga (dan deskripsi) yang diambil dari produk pada titik pemesanan, untuk memastikan bahwa setiap perubahan harga atau perubahan nama produk di masa mendatang tidak memengaruhi faktur yang sudah ada sebelumnya.

Teknik lain yang saya gunakan (cukup berhasil) adalah memperkenalkan konsep mengungguli entitas dalam database - sehingga catatan asli tetap ada dan versi baru dimasukkan setiap kali data diubah. Untuk melakukan ini, saya menambahkan bidang berikut:

  • ID saat ini
  • digantikanById
  • Id sebelumnya

Itu membuat kueri sedikit lebih rumit - tetapi terutama untuk alamat, penting untuk memastikan bahwa faktur tetap konstan dan bahwa perubahan alamat tidak tercermin dalam faktur - mis. mengubah nama perusahaan seharusnya tidak mengubah faktur yang diajukan sebelumnya.

CREATE TABLE `Invoice` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
PRIMARY KEY (`id`)
);

CREATE TABLE `Invoice Item` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
`desc` VARCHAR(200) NOT NULL ,
`value` DECIMAL(11,3) NOT NULL ,
`quantity` DECIMAL(11,3) NOT NULL ,
`total` DECIMAL(11,3) NOT NULL ,
`fk_id_Invoice` INTEGER NOT NULL ,
`fk_id_Product` INTEGER NOT NULL ,
PRIMARY KEY (`id`)
);

CREATE TABLE `Product` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
`Price` DECIMAL(11,3) NOT NULL ,
`Name` VARCHAR(200) NOT NULL ,
`Status` ENUM NOT NULL ,
PRIMARY KEY (`id`)
);

ALTER TABLE `Invoice Item` ADD FOREIGN KEY (fk_id_Invoice) REFERENCES `Invoice` (`id`);
ALTER TABLE `Invoice Item` ADD FOREIGN KEY (fk_id_Product) REFERENCES `Product` (`id`);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah ada Skrip Peningkatan Musim Semi Batch 3 untuk MySQL?

  2. Bagaimana cara mengambil Input dari Kotak Teks yang Dibuat Secara Dinamis di php dan menyimpannya di MySQL menggunakan loop?

  3. Ubah warna font komentar di kueri MySQL Workbench

  4. Cara mencetak tabel database MySQL di PHP menggunakan PDO

  5. Membuat kueri dalam garis bujur dan lintang di MySQL