· 6 years ago · Aug 07, 2019, 11:12 AM
1CREATE TABLE upload (
2 `id` int(5) AUTO_INCREMENT PRIMARY KEY,
3 `user_id` int(3) NOT NULL COMMENT 'ссылка на внешний ключ таблицы users',
4 `archive_name` varchar(100) NOT NULL COMMENT 'имя архивированного csv файла',
5 `error` int(1) NOT NULL COMMENT 'есть ошибки или нет',
6 `upload_date` datetime NOT NULL DEFAULT current_timestamp
7) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'таблица загрузок';
8
9DROP TRIGGER IF EXISTS chk_uploads_fields;
10
11DELIMITER //
12CREATE TRIGGER chk_uploads_fields
13 before INSERT
14 ON upload FOR EACH ROW
15BEGIN
16 if new.user_id is null or
17 new.archive_name is null
18 then
19 SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'field `user_id`, `archive_name`, `archive_files_suv`, `valid_files`, `invalid_files` mustn`t be empty';
20 end if;
21END; //
22DELIMITER ;
23
24
25
26///////////////////////////////////////////////
27
28CREATE TABLE file (
29 `id` int(7) AUTO_INCREMENT PRIMARY KEY,
30 `uploads_id` int(5) NOT NULL COMMENT 'ссылка на внешний ключ таблицы uploads',
31 `date_id` int(3) NOT NULL COMMENT 'ссылка на внешний ключ таблицы dates',
32 `service_id` int(2) NOT NULL COMMENT 'ссылка на внешний ключ таблицы service',
33 `territory_id` int(2) NOT NULL COMMENT 'ссылка на внешинй ключ таблицы territory',
34 `file_name` varchar(100) NOT NULL COMMENT 'имя csv файла',
35 `file_path` varchar(100) NOT NULL COMMENT 'путь к файлу',
36 `rows_sum` int(8) NOT NULL COMMENT 'количество строк в файле',
37 `file_date` datetime NOT NULL DEFAULT current_timestamp COMMENT 'дата добавления файла'
38) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'справочник csv файлов';
39
40DROP TRIGGER IF EXISTS chk_files_fields;
41
42DELIMITER //
43CREATE TRIGGER chk_files_fields
44 before INSERT
45 ON file FOR EACH ROW
46BEGIN
47 if new.uploads_id is null or
48 new.date_id is null or
49 new.service_id is null or
50 new.territory_id is null or
51 new.file_name is null or
52 new.rows_sum is null
53 then
54 SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'fields `uploads_id`, `date_id`, `service_id`, `territory_id`, `file_name`, `rows_sum` mustn`t be empty';
55 end if;
56END; //
57DELIMITER ;
58
59
60///////////////////////////////////////////////////////////
61
62CREATE TABLE `apple` (
63 `id` mediumint(9) AUTO_INCREMENT PRIMARY KEY,
64 `file_id` int(7) NOT NULL COMMENT 'ссылка на внешний ключ таблицы files',
65 `service_id` int(2) NOT NULL COMMENT 'ссылка на внешний ключ таблицы service',
66 `territory_id` int(2) NOT NULL COMMENT 'ссылка на внешний ключ таблицы territory',
67 `date_id` int(3) NOT NULL COMMENT 'ссылка на внешний ключ таблицы dates',
68 `track` varchar(500) DEFAULT NULL COMMENT 'название трека',
69 `artist` varchar(500) DEFAULT NULL COMMENT 'имя артиста',
70 `author` varchar(500) DEFAULT NULL COMMENT 'имя автора(ов)',
71 `dsp_id` varchar(50) DEFAULT NULL COMMENT 'идентификатор трека присвоенный компанией',
72 `isrc` varchar(20) DEFAULT NULL COMMENT 'ISRC код произведения',
73 `album_id` varchar(45) DEFAULT NULL COMMENT 'Google код, присвоенный альбому',
74 `album_name` varchar(500) DEFAULT NULL COMMENT 'Google название альбома',
75 `upc_ean` varchar(32) DEFAULT NULL COMMENT 'UPC или EAN код альбома',
76 `track_artist_md5` varchar(32) DEFAULT NULL COMMENT 'MD5 хэш полей track и artist',
77 `track_author_md5` varchar(32) DEFAULT NULL COMMENT 'MD5 хэш полей track и author',
78 `used_sum` int(5) DEFAULT NULL COMMENT 'количество использований трека в сервисе',
79 INDEX track_ind (track),
80 INDEX artist_ind (artist),
81 INDEX author_ind (author),
82 INDEX dsp_id_ind (dsp_id),
83 INDEX isrc_ind (isrc),
84 INDEX album_id_ind (album_id),
85 INDEX album_name_ind (album_name),
86 INDEX upc_ean_ind (upc_ean),
87 INDEX track_artist_ind (track_artist_md5),
88 INDEX track_author_ind (track_author_md5)
89) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'таблица треков компании Apple';
90
91DROP TRIGGER IF EXISTS chk_all_apple_fields;
92
93DELIMITER //
94CREATE TRIGGER chk_all_apple_fields
95 before INSERT
96 ON apple FOR EACH ROW
97BEGIN
98 if new.file_id is null or
99 new.service_id is null or
100 new.territory_id is null or
101 new.date_id is null
102 then
103 SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'fill in all fields: `file_id`, `service_id`, `territory_id`, `date_id`';
104 end if;
105 if new.track is null and
106 new.artist is null and
107 new.author is null
108 then
109 SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'fill in at least one field: `track`, `artist`, `author`';
110 end if;
111 SET new.track_artist_md5 = MD5(CONCAT(LCASE(TRIM(NEW.track)), LCASE(TRIM(NEW.artist))));
112 SET new.track_author_md5 = MD5(CONCAT(LCASE(TRIM(NEW.track)), LCASE(TRIM(NEW.author))));
113END; //
114DELIMITER ;