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

Apakah normalisasi diperlukan dalam kasus ini?

Mengingat pertanyaan pembaruan Anda, jawaban yang diperbarui:

Saya benar-benar tidak melihat manfaat dari pembagian tabel ini

id | some_unique_field | name | sex | university

Anda harus membagi tabel ini:

id | fundraiser_id | donation_amount | name | sex | university

Ke dalam ini:

donation
id | fundraiser_id | donation_amount | donator_id

fundraiser
id | charity | ....

donator
id | name | sex | university

Ini akan memudahkan untuk mendapatkan jumlah yang disumbangkan per orang.

Jika Anda ingin mengimpor spreadsheet Anda, saya sarankan melakukan sesuatu seperti ini:

Langkah 1:buat tabel lubang hitam seperti ini:

DROP TABLE IF EXISTS `test`.`bh_donations`;
CREATE TABLE  `test`.`bh_donations` (
  `fundraiser_name` varchar(45) NOT NULL,
  `donation_amount` decimal(10,2) NOT NULL,
  `name` varchar(45) NOT NULL,
  `sex` char(1) NOT NULL,
  `university` varchar(45) NOT NULL
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1;    

Anda tidak memerlukan id di sini, tetapi jika ini menyederhanakan kode Anda, tambahkan saja.

Langkah 2, tambahkan pemicu ke tabel lubang hitam untuk memprosesnya.

DELIMITER $$

CREATE TRIGGER bi_bh_donations BEFORE INSERT ON bh_donations FOR EACH ROW
BEGIN
  DECLARE mydonater_id integer;
  DECLARE myfundraiser_id integer;

  SELECT f.id INTO myfundraiser_id FROM fundraiser f 
    WHERE f.name = new.fundraiser_name LIMIT 1;

  IF f.id IS NULL THEN BEGIN
    SELECT error_fundraiser_is_unknown FROM table_error;
  END; END IF;

  SELECT d.id INTO mydonator_id FROM donator d
    WHERE d.name = new.name AND d.sex = new.sex AND d.university = new.university
  LIMIT 1;

  IF mydonator_id IS NULL THEN BEGIN 
    INSERT INTO donator (name, sex, university)
    VALUES (new.name, new.sex, new,university);
  END; END IF;

  SELECT LAST_INSERT_ID() INTO mydonator_id;

  INSERT INTO donation (fundraiser_id, donation_amount, donator_id)
    VALUES (myfundraiser_id, new.amount, mydonater_id); 
END$$

DELIMITER ;

Langkah 3 gunakan LOAD DATA INFILE untuk mengimpor data

LOAD DATA INFILE 'data.csv' INTO TABLE bh_donations
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

Sekarang Anda bisa membaca baris excel ke dalam tabel blackhole dengan menyimpan file Excel sebagai CSV.
Dan menggunakan LOAD DATA INFILE untuk membaca data ke dalam tabel blackhole.

Lihat:tabel blackhole:http://dev. mysql.com/doc/refman/5.0/en/blackhole-storage-engine.html
lebih banyak lubang hitam:Penggunaan materi iklan untuk mesin lubang hitam
pemicu:http://dev.mysql.com /doc/refman/5.5/en/triggers.html
memuat file data:http://dev .mysql.com/doc/refman/5.5/en/load-data.html

Semoga membantu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menjalankan atau memuat file .po/.mo untuk pelokalan di php

  2. Mengekspos nama tabel dan nama bidang di URL permintaan

  3. mysql - setelah memasukkan abaikan dapatkan kunci utama

  4. PHP PDO MySQL dan bagaimana cara menangani transaksi MySQL?

  5. Menyortir ulang kolom id dalam tabel MySQL?