Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy w tym przypadku wymagana jest normalizacja?

Biorąc pod uwagę Twoje pytanie dotyczące aktualizacji, zaktualizowana odpowiedź:

Naprawdę nie widzę żadnych korzyści z dzielenia tego stołu

id | some_unique_field | name | sex | university

Zdecydowanie powinieneś podzielić ten stół:

id | fundraiser_id | donation_amount | name | sex | university

W tym:

donation
id | fundraiser_id | donation_amount | donator_id

fundraiser
id | charity | ....

donator
id | name | sex | university

Ułatwi to otrzymanie kwoty darowizny na osobę.

Jeśli chcesz zaimportować arkusz kalkulacyjny, zalecamy wykonanie czegoś takiego:

Krok 1:utwórz tabelę czarnej dziury w następujący sposób:

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;    

Nie potrzebujesz id tutaj, ale jeśli uprości to Twój kod, za wszelką cenę dodaj go.

Krok 2, dodaj wyzwalacz do tabeli czarnej dziury, aby go przetworzyć.

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 ;

Krok 3 użyj LOAD DATA INFILE, aby zaimportować dane

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

Teraz możesz po prostu wczytać linie Excela do tabeli czarnej dziury, zapisując plik Excela jako CSV.
I używając LOAD DATA INFILE wczytać dane do tablicy czarnej dziury.

Zobacz:tabele blackhole:http://dev. mysql.com/doc/refman/5.0/en/blackhole-storage-engine.html
więcej czarnej dziury:Kreatywne zastosowania silnika czarnej dziury
wyzwalacze:http://dev.mysql.com /doc/refman/5.5/pl/wyzwalacze.html
załaduj plik danych:http://dev .mysql.com/doc/refman/5.5/en/load-data.html

Mam nadzieję, że to pomoże.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybór jednego zapytania nadrzędnego MySQL

  2. MySQL - wyklucz wszystkich zablokowanych użytkowników z wyników

  3. Wybierz datę z mojej bazy danych bez sekund za pomocą PHP MySql

  4. Python, Brew i MySQLdb

  5. Jak wybrać daty ostatnich 30 dni w MySQL, nawet jeśli w mysql nie ma dat?