Добрый вечер, всем! В ходе серии нескольких кратких статьи, мы ознакомимся, поймем и выполним проект my-sqlite.
В данной статье мы рассмотрим:
- Стэк технологий
- Подробнее об языке SQL
- Структуру проекта
- Логика программы
*Глосарий приведен в самом конце
- Стэк технологии
Для реализации нашего проекта MySQLite, нам потребуется:
- Базовые знания по JS и node.
- 3 Пакета из NPM (Полагается, что у вас установлен сам node.js)
- convert-csv-to-json
- json-2-csv
- prompt-sync
Итак, все что нужно взяли. Теперь, начнем к построении логики нашей программы. Как говорилось ранее в 0-части, мы попрактикуемся над ООП и не зря.
- Подробнее об языке SQL
SQL выполняет наши запросы касательно к БД. Запросы могут быть: извлечь определенные записи, удалить запись, добавить новую запись и тд. Синтаксис данного языка прост и понятен каждому. SQL состоит из команд (statements : SELECT, UPDATE, DELETE, INSERT), операторов (keywords : WHERE, SET, ORDER, FROM, VALUES) с которыми можно легко манипулировать данные из БД.
- Логика и структура нашей программы только для part-00
Наш подход будет обьектно-ориентированным. Мы создадим класс mySQLiteRequest, который будет вести себя как SQLite. Наш класс mySQLiteRequest будет иметь определенные методы и свойства, которые описывают основные комманды языка SQL, например SELECT, INSERT, WHERE и т.д.
Имена методов соответсвтвуют именам комманды языка SQL. Все нижеперечисленные примеры были представлены на данном языке SQL, а наши методы должны выполнять точно такие обязанности этих комманд.
Методы:
- select(column_name)
- Метод принимает имя или массив имен атрибутов. В последующем должен вернуть значения этих атрибутов.
- Пример: SELECT name FROM userTable, должен вернуть нам имена всех пользователей.
- from(table_name)
- Метод принимает имя таблицы, то есть имя csv файла с которым программа будет в дальнейшем работать.
- Пример: SELECT age FROM userTable означает что будем работать с записями из файла userTable.csv
- where(column_name, criteria)
- Метод принимает два значения: имя атрибута, соответствующее значения атрибута. В дальнейшем это поможет извлечь или обновить записи, которые подходят под этим значениям определенного атрибута.
- Пример: UPDATE userTable SET age=31 WHERE name=”Harry Potter”, означает что мы обновим запись и изменим возраст на 31 пользователя чье имя – Harry Potter.
- order(order_type, column_name)
- Метод принимает два значения: тип сортировки(ascending or descending), атрибут по которой будет идти сортировка.
- Пример SELECT * FROM userTable ORDER BY username ASC выдает нам список всех записей в возрастающем порядке по атрибуту username(http://2sql.ru/novosti/sql-order-by/).
- insert(table_name)
- Метод принимает имя таблицы (имя csv файла)
- Пример INSERT INTO userTable ……. подразумевает, что мы должны внести данные в данный csv файл. (https://www.w3schools.com/sql/sql_insert.asp)
- values(data)
- Принимает ассоциативный массив значении, которые в последующем будут добавлены или обновлены в БД.
- Пример: INSERT INTO userTable (name, age) VALUES (“Asia”, 16), то есть мы видим, что в данный файл вносится новая запись с значениями как Asia,16.
- update(table_name)
- Метод принимает имя таблицы/файла, который будет в дальнейшем редактирован, обновлен.
- Пример: UPDATE userTable SET age=31 WHERE name=”Harry Potter”, означает что мы изменяем csv файл userTable, обновляя определенную запись.
- delete()
- Метод, который удаляет определенную запись. Но этот метод требует дополнительных параметров описывающие запись.
- Пример: DELETE FROM userTable WHERE name=”Ric”; указывает на то, что мы удаляем запись где имя пользователя равен Ric.
- set(value)
- поведение данного метода точно схожи с методом values(data). Но в отличие от этого, set() метод принимает лишь часть данных в виде hash(ключ-значение) и обновляет запись с этими данными.
- Пример: UPDATE userTable SET age=31 WHERE name=”Harry Potter” в таком запросе мы меняем возраст нашего пользователя с именем Гарри Поттер на 31.
Свойства:
- csvFileName
type : String
description : Сохраняет имя БД или же имя csv файла
- params
type : JSON object
description: Хранит в себе данные об атрибутах комманд SELECT и WHERE
parametres:
- select_attribute
type : String or Array
description : Хранит данные о том, значения каких атрибутов нужно извлечь
- where_attribute
type : JSON Object
description : Хранит данные о том, по каким параметрам должен соответсвовать желаемая запись.
- Column_name
type : String
description : Сохраняет имя атрибута,по которым будет идти фильтрация.
- Criteria
type : String
description : Сохраняет значение данного атрибута,по которым будет идти фильтрация.
- flags
type : JSON Object
description : Сохраняет состояние каждой команды в виде булевских значении.
parametres:
- to_select
type : Boolean
description : хранит состояние комманды select
- to_insert
type : Boolean
description : хранит состояние комманды insert
- to_where
type : Boolean
description : хранит состояние оператора where
- to_delete
type : Boolean
description : хранит состояние комманды delete
- to_sort
type : Boolean
description : хранит состояние оператора order
- to_update
type : Boolean
description : хранит состояние комманды update
- sort
type : JSON Object
description : Сохраняет состояние каждой команды в виде булевских значении.
- Order
type : String
description : Хранит значение типа сортировки, по возрастающей или по убывающей.
- columnName
type : String
description : Хранит значение атрибута по которой будет происходит сортировка.
- Value
type : JSON Object
description : хранит в себе значения новой добавляемой записи или новые данные для обновления существующей записи.
Взаимодействие свойств и методов для достижения цели
Все вышеперечисленные наши методы лишь собирают и сохраняют нужную информацию о запросе в наших свойствах данного класса. А сама реализация запроса и вывода ответа происходит в методе run(). Этот метод собирает все нужные данные в едино и обрабатывает, затем выводит результат на консоль.
Пример:
таким образом будем использовать класс mySQLiteRequest:
request = MySqliteRequest.new
request = request.from(‘nba_player_data.csv’)
request = request.select(‘name’)
request = request.where(‘birth_state’, ‘Indiana’)
request.run
=> [{«name» => «Andre Brown»]
Глосарий
Стэк технологии – список всех технологии, которые будут использоваться для создания проекта
NPM – node package manager, единая база модулей и готовых решений типичных и специфичных проблем/задач на node.js.
Ура! А теперь в след.материале мы наконец приступим к написанию кода. Удачи!