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;

अब आप एक्सेल फ़ाइल को CSV के रूप में सहेज कर ब्लैकहोल तालिका में एक्सेल लाइनों को पढ़ सकते हैं।
और LOAD DATA INFILE का उपयोग करके डेटा को ब्लैकहोल तालिका में पढ़ने के लिए।

देखें:ब्लैकहोल टेबल:http://dev. mysql.com/doc/refman/5.0/hi/blackhole-storage-engine.html
अधिक ब्लैकहोल:ब्लैकहोल इंजन के लिए रचनात्मक उपयोग
ट्रिगर:http://dev.mysql.com /doc/refman/5.5/hi/triggers.html
डेटा इनफाइल लोड करें:http://dev .mysql.com/doc/refman/5.5/hi/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 क्लॉज द्वारा SELECT और HAVING/GROUP BY के बीच सामान्य उप-अभिव्यक्तियों को समाप्त करता है

  2. mysql तैयार कथन त्रुटि:MySQLSyntaxErrorException

  3. हाइबरनेट 5 :- org.hibernate.MappingException:अज्ञात निकाय

  4. ईमेल पता फ़ील्ड से अद्वितीय डोमेन की गणना करने के लिए MySQL क्वेरी

  5. MySQL पूर्ण पाठ खोज, मुझे MATCH के लिए गलत तर्क क्यों मिल रहे हैं?