Mysql
 sql >> база данни >  >> RDS >> Mysql

Изисква ли се нормализиране в този случай?

Предвид въпроса ви за актуализации, актуализиран отговор:

Наистина не виждам никаква полза от разделянето на тази таблица

id | some_unique_field | name | sex | university

Определено трябва да разделите тази таблица:

id | fundraiser_id | donation_amount | name | sex | university

В това:

donation
id | fundraiser_id | donation_amount | donator_id

fundraiser
id | charity | ....

donator
id | name | sex | university

Това ще улесни получаването на дарената сума на човек.

Ако искате да импортирате електронната си таблица, препоръчвам да направите нещо подобно:

Стъпка 1:създайте таблица с черни дупки по следния начин:

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;    

Нямате нужда от id тук, но ако това опростява кода ви, непременно го добавете.

Стъпка 2, добавете тригер към таблицата с черни дупки, за да го обработите.

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 ;

Стъпка 3 използвайте LOAD DATA INFILE, за да импортирате данните

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

Сега можете просто да прочетете редовете на excel в таблицата с черна дупка, като запазите файла на Excel като CSV.
И използвате LOAD DATA INFILE за да прочетете данните в таблицата с черни дупки.

Вижте:blackhole tables:http://dev. mysql.com/doc/refman/5.0/en/blackhole-storage-engine.html
още черна дупка:Креативно използване на двигателя за черна дупка
задействания:http://dev.mysql.com /doc/refman/5.5/en/triggers.html
заредете файл с данни:http://dev .mysql.com/doc/refman/5.5/en/load-data.html

Надявам се това да помогне.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Подготовка на MySQL INSERT/UPDATE оператор със стойности по подразбиране

  2. Проблем с извеждането на арабски текст в php mysql utf-8

  3. java mysql подготвено изявление

  4. MySQL now() променя часовата зона

  5. Как да посоча IN клауза в раницата на laravel?