MySQLite часть-1

Добрый вечер, всем! В ходе серии нескольких кратких статьи, мы ознакомимся, поймем и выполним  проект 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.

Ура! А теперь в след.материале мы наконец приступим к написанию кода. Удачи!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.