Last active
July 25, 2022 06:56
-
-
Save BrightMilk/9801085164ba5535d5f9e61dadb5ef0e to your computer and use it in GitHub Desktop.
Revisions
-
BrightMilk revised this gist
Jul 24, 2022 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -5,7 +5,7 @@ ### Хранение информации о поле Лучший способ для хранения информации о поле - использовать справочную таблицу возможных значений. Можно расширять таблицу по мере необходимости в новых значениях пола. Таким образом, в будущем получится избежать возможных проблем с определением гендерной принадлежности и, например, с процессом по смене пола. Также все-таки лучше не использовать *null*-значения для пола - можно указать в качестве дефолтного значение не определенного пола из справочника. ### Хранение даты рождения -
BrightMilk revised this gist
Jul 24, 2022 . 1 changed file with 10 additions and 10 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -74,16 +74,16 @@ INSERT INTO db.gender (name,description) VALUES ('female','Женщина'); INSERT INTO db.`user` (name,gender_id,birthdate) VALUES ('Yvonne Mcdowell',3,'1979-10-09'), VALUES ('Lareina Harrington',3,'2001-03-22'), VALUES ('Carl Espinoza',2,'1999-01-01'), VALUES ('Mallory Buck',3,'2002-12-02'), VALUES ('Althea Morton',3,'2001-09-17'), VALUES ('Shannon Fry',3,'1992-07-12'), VALUES ('Chaim Rogers',2,'2002-11-11'), VALUES ('Rachel Payne',3,'2001-08-13'), VALUES ('Matthew Casey',2,'2000-10-25'), VALUES ('Baxter Thornton',2,'1998-06-09'); INSERT INTO db.phone_number (`number`,user_id) VALUES ('(667) 281-8687',1), -
BrightMilk revised this gist
Jul 24, 2022 . 1 changed file with 29 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,12 +1,38 @@ # Решение [задания 1](https://gist.github.com/BrightMilk/057fcaafcdff913ed13c821f29d8fada) ## Оптимизация хранения данных ### Хранение информации о поле Лучший способ для хранения информации о поле - использовать справочную таблицу возможных значений. Можно расширять таблицу по мере необходимости в новых значениях пола. Таким образом, в будущем получится избежать возможных проблем с определением гендерной принадлежности и, например, процессом смене пола. Также все-таки лучше не использовать *null*-значения для пола - можно указать в качестве дефолтного значение не определенного пола из справочника. ### Хранение даты рождения Дату рождения лучше хранить в формате *DATE*, например, *1970-01-01*. Если хранить дату рождения в формате *TIMESTAMP (unixtime)*, то стоит учитывать, что *TIMESTAMP* имеет диапазон от *«1970-01-01 00:00:01»* до *«2038-01-19 03:14:07» (UTC)*, поэтому в большинстве случаев он не подходит для даты рождения. Можно использовать *DATETIME*, но тогда появляется необходимость со стороны пользователя заполнять также время рождения (что, как мне кажется, избыточно). Если такой необходимости нет - нужно использовать *DATE*. Также вышеперечисленные типы данных используют различное количество памяти для хранения значений: ``` +------------+----------+ | DATE: | 3 bytes | | TIMESTAMP: | 4 bytes | | DATETIME: | 8 bytes | +------------+----------+ ``` ## Схема БД ``` CREATE TABLE db.`user` ( id INT auto_increment NOT NULL, name varchar(100) NOT NULL, gender_id INT DEFAULT 0 NOT NULL, birthdate DATE NOT NULL, CONSTRAINT user_PK PRIMARY KEY (id) ) @@ -43,6 +69,7 @@ ALTER TABLE db.`phone_number` ADD CONSTRAINT phone_number_FK FOREIGN KEY (user_i ``` INSERT INTO db.gender (name,description) VALUES ('unknown','Не определено'), VALUES ('male','Мужчина'), VALUES ('female','Женщина'); @@ -84,7 +111,7 @@ INSERT INTO db.phone_number (`number`,user_id) ``` SELECT u.`name`, count(pn.`id`) AS `amount of phone numbers` FROM testovoe.`user` u JOIN testovoe.`phone_number` pn ON pn.`user_id` = u.`id` WHERE u.`gender_id` = 3 AND TIMESTAMPDIFF(YEAR, u.`birthdate`, CURDATE()) BETWEEN 18 AND 22 GROUP BY pn.`user_id`; ``` Результат: -
BrightMilk revised this gist
Jul 24, 2022 . 1 changed file with 4 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -37,7 +37,11 @@ COLLATE=utf8mb4_general_ci; ALTER TABLE db.`user` ADD CONSTRAINT user_FK FOREIGN KEY (gender_id) REFERENCES db.gender(id); ALTER TABLE db.`phone_number` ADD CONSTRAINT phone_number_FK FOREIGN KEY (user_id) REFERENCES db.`user`(id); ``` ## Тестовые данные ``` INSERT INTO db.gender (name,description) VALUES ('male','Мужчина'), VALUES ('female','Женщина'); @@ -72,7 +76,6 @@ INSERT INTO db.phone_number (`number`,user_id) VALUES ('(451) 437-3685',5), VALUES ('1-222-623-1235',2), VALUES ('1-713-424-7400',3); ``` ## Выполнение запроса -
BrightMilk revised this gist
Jul 24, 2022 . 1 changed file with 5 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,6 +1,7 @@ # Решение [задания 1](https://gist.github.com/BrightMilk/057fcaafcdff913ed13c821f29d8fada) ## Схема БД ``` CREATE TABLE db.`user` ( id INT auto_increment NOT NULL, @@ -74,6 +75,8 @@ INSERT INTO db.phone_number (`number`,user_id) ``` ## Выполнение запроса Запрос, возвращающий имя и число указанных телефонных номеров девушек в возрасте от 18 до 22 лет, выглядит следующим образом: ``` SELECT u.`name`, count(pn.`id`) AS `amount of phone numbers` FROM testovoe.`user` u -
BrightMilk revised this gist
Jul 24, 2022 . 1 changed file with 13 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -76,8 +76,20 @@ INSERT INTO db.phone_number (`number`,user_id) Запрос, возвращающий имя и число указанных телефонных номеров девушек в возрасте от 18 до 22 лет, выглядит следующим образом: ``` SELECT u.`name`, count(pn.`id`) AS `amount of phone numbers` FROM testovoe.`user` u JOIN testovoe.`phone_number` pn ON pn.`user_id` = u.`id` WHERE u.`gender_id` = 2 AND TIMESTAMPDIFF(YEAR, u.`birthdate`, CURDATE()) BETWEEN 18 AND 22 GROUP BY pn.`user_id`; ``` Результат: ``` +--------------------+-------------------------+ | name | amount of phone numbers | +--------------------+-------------------------+ | Lareina Harrington | 3 | | Mallory Buck | 3 | | Althea Morton | 2 | | Rachel Payne | 2 | +--------------------+-------------------------+ 4 rows in set (0.001 sec) ``` -
BrightMilk revised this gist
Jul 24, 2022 . 1 changed file with 8 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,7 +1,6 @@ Решение [задания 1](https://gist.github.com/BrightMilk/057fcaafcdff913ed13c821f29d8fada). *SQL*-запрос выглядит следующим образом: ``` CREATE TABLE db.`user` ( id INT auto_increment NOT NULL, @@ -73,4 +72,12 @@ INSERT INTO db.phone_number (`number`,user_id) VALUES ('1-222-623-1235',2), VALUES ('1-713-424-7400',3); ``` Запрос, возвращающий имя и число указанных телефонных номеров девушек в возрасте от 18 до 22 лет, выглядит следующим образом: ``` SELECT u.`name`, count(pn.`id`) AS `amount of numbers` FROM testovoe.`user` u JOIN testovoe.`phone_number` pn ON pn.`user_id` = u.`id` WHERE u.`gender_id` = 2 AND TIMESTAMPDIFF(YEAR, u.`birthdate`, CURDATE()) BETWEEN 18 AND 22 GROUP BY pn.`user_id`; ``` -
BrightMilk revised this gist
Jul 24, 2022 . 1 changed file with 8 additions and 8 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -3,7 +3,7 @@ *SQL*-запрос выглядит следующим образом: ``` CREATE TABLE db.`user` ( id INT auto_increment NOT NULL, name varchar(100) NOT NULL, gender_id INT NOT NULL, @@ -14,7 +14,7 @@ ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE db.gender ( id INT auto_increment NOT NULL, name varchar(100) NOT NULL, description varchar(100) NULL, @@ -24,7 +24,7 @@ ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE db.phone_number ( id INT auto_increment NOT NULL, `number` varchar(255) NOT NULL, user_id INT NOT NULL, @@ -35,14 +35,14 @@ ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ALTER TABLE db.`user` ADD CONSTRAINT user_FK FOREIGN KEY (gender_id) REFERENCES db.gender(id); ALTER TABLE db.`phone_number` ADD CONSTRAINT phone_number_FK FOREIGN KEY (user_id) REFERENCES db.`user`(id); INSERT INTO db.gender (name,description) VALUES ('male','Мужчина'), VALUES ('female','Женщина'); INSERT INTO db.`user` (name,gender_id,birthdate) VALUES ('Yvonne Mcdowell',2,'1979-10-09'), VALUES ('Lareina Harrington',2,'2001-03-22'), VALUES ('Carl Espinoza',1,'1999-01-01'), @@ -54,7 +54,7 @@ INSERT INTO testovoe.`user` (name,gender_id,birthdate) VALUES ('Matthew Casey',1,'2000-10-25'), VALUES ('Baxter Thornton',1,'1998-06-09'); INSERT INTO db.phone_number (`number`,user_id) VALUES ('(667) 281-8687',1), VALUES ('1-922-306-2043',2), VALUES ('1-232-249-6217',3), -
BrightMilk revised this gist
Jul 24, 2022 . 1 changed file with 76 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1 +1,76 @@ Решение [задания 1](https://gist.github.com/BrightMilk/057fcaafcdff913ed13c821f29d8fada). *SQL*-запрос выглядит следующим образом: ``` CREATE TABLE testovoe.`user` ( id INT auto_increment NOT NULL, name varchar(100) NOT NULL, gender_id INT NOT NULL, birthdate DATE NOT NULL, CONSTRAINT user_PK PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE testovoe.gender ( id INT auto_increment NOT NULL, name varchar(100) NOT NULL, description varchar(100) NULL, CONSTRAINT gender_PK PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE testovoe.phone_number ( id INT auto_increment NOT NULL, `number` varchar(255) NOT NULL, user_id INT NOT NULL, CONSTRAINT phone_number_PK PRIMARY KEY (id), ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ALTER TABLE testovoe.`user` ADD CONSTRAINT user_FK FOREIGN KEY (gender_id) REFERENCES testovoe.gender(id); ALTER TABLE testovoe.`phone_number` ADD CONSTRAINT phone_number_FK FOREIGN KEY (user_id) REFERENCES testovoe.`user`(id); INSERT INTO testovoe.gender (name,description) VALUES ('male','Мужчина'), VALUES ('female','Женщина'); INSERT INTO testovoe.`user` (name,gender_id,birthdate) VALUES ('Yvonne Mcdowell',2,'1979-10-09'), VALUES ('Lareina Harrington',2,'2001-03-22'), VALUES ('Carl Espinoza',1,'1999-01-01'), VALUES ('Mallory Buck',2,'2002-12-02'), VALUES ('Althea Morton',2,'2001-09-17'), VALUES ('Shannon Fry',2,'1992-07-12'), VALUES ('Chaim Rogers',1,'2002-11-11'), VALUES ('Rachel Payne',2,'2001-08-13'), VALUES ('Matthew Casey',1,'2000-10-25'), VALUES ('Baxter Thornton',1,'1998-06-09'); INSERT INTO testovoe.phone_number (`number`,user_id) VALUES ('(667) 281-8687',1), VALUES ('1-922-306-2043',2), VALUES ('1-232-249-6217',3), VALUES ('1-604-197-3522',4), VALUES ('(279) 852-2417',5), VALUES ('(218) 766-7412',6), VALUES ('(502) 213-6740',7), VALUES ('1-344-205-3086',8), VALUES ('1-380-420-6513',9), VALUES ('(782) 347-5271',10), VALUES ('(876) 626-2755',4), VALUES ('(846) 528-8542',8), VALUES ('1-422-658-7136',2), VALUES ('1-168-395-6412',4), VALUES ('(451) 437-3685',5), VALUES ('1-222-623-1235',2), VALUES ('1-713-424-7400',3); ``` -
BrightMilk revised this gist
Jul 24, 2022 . No changes.There are no files selected for viewing
-
BrightMilk created this gist
Jul 24, 2022 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1 @@ Test