Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Có phải chuẩn hóa trong trường hợp này không?

Đưa ra câu hỏi cập nhật của bạn, một câu trả lời được cập nhật:

Tôi thực sự không thấy lợi ích gì khi chia nhỏ bảng này

id | some_unique_field | name | sex | university

Bạn chắc chắn nên chia bảng này:

id | fundraiser_id | donation_amount | name | sex | university

Vào cái này:

donation
id | fundraiser_id | donation_amount | donator_id

fundraiser
id | charity | ....

donator
id | name | sex | university

Điều này sẽ giúp bạn dễ dàng nhận được số tiền quyên góp cho mỗi người.

Nếu bạn muốn nhập bảng tính của mình, tôi khuyên bạn nên làm như sau:

Bước 1:tạo bảng lỗ hổng bảo mật như sau:

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;    

Bạn không cần id ở đây, nhưng nếu nó đơn giản hóa mã của bạn, bằng mọi cách, hãy thêm nó vào.

Bước 2, thêm trình kích hoạt vào bảng lỗ hổng bảo mật để xử lý.

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 ;

Bước 3 sử dụng LOAD DATA INFILE để nhập dữ liệu

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

Giờ đây, bạn chỉ có thể đọc các dòng excel vào bảng lỗ hổng bảo mật bằng cách lưu tệp Excel dưới dạng CSV.
Và sử dụng LOAD DATA INFILE để đọc dữ liệu vào bảng lỗ đen.

Xem:bảng lỗ hổng bảo mật: http:// dev. mysql.com/doc/refman/5.0/en/blackhole-storage-engine.html
lỗ hổng khác: Sử dụng quảng cáo cho công cụ lỗ đen Trình kích hoạt
: http://dev.mysql.com /doc/refman/5.5/en/triggers.html
tải dữ liệu trong tệp: http:// dev .mysql.com / doc / refman / 5.5 / vi / load-data.html

Hy vọng điều này sẽ hữu ích.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xác thực Tên người dùng và Mật khẩu từ MySQL

  2. Chỉ hiển thị ngày gần đây nhất từ ​​bảng MySQL đã tham gia

  3. Chọn hàng đầu tiên cho mỗi nhóm trong MySQL?

  4. Tìm nạp mảng chức năng nhân đôi giá trị ở mỗi vị trí của mảng?

  5. Làm cách nào để thêm tìm kiếm Sphider vào trang web của tôi? Không thể kết nối với cơ sở dữ liệu