Базы Данных

Влад Комодей

MongoDB

NoSQL

  • Buzzword
  • Не относится ни к какой определенной технологии
  • Использовался как хэштэг на одном митапе, организованном Твиттером
  • Not SQL, Not only SQL
  • Более гибкий query language чем в реляционных моделях
  • Лучше масштабируется по определению

Нормальные формы

6 нормальных форм

Суть - помощь в проектировании базы данных

1НФ

В значениях храним скаляры

2НФ = 1НФ +

Не ключевой атрибут неприводимо зависит от Первичного Ключа(ПК).

Неприводимость означает, что в составе потенциального ключа отсутствует меньшее подмножество атрибутов, от которого можно также вывести данную функциональную зависимость.

3НФ = 2НФ + 

 выносить все не ключевые поля, содержимое которых может относиться к нескольким записям таблицы в отдельные таблицы.

Денормализация

Это намеренное/ненамеренное нарушение нормальных форм


{
  "user_id": 251,
  "first_name": "Bill",
  "last_name": "Gates",
  "summary": "Co-chair of the Bill & Melinda Gates... Active blogger.",
  "region_id": "us:91",
  "industry_id": 131,
  "photo_url": "/p/7/000/253/05b/308dd6e.jpg",
  "positions": [
    {"job_title": "Co-chair", "organization": "Bill & Melinda Gates Foundation"},
    {"job_title": "Co-founder, Chairman", "organization": "Microsoft"}
  ],
  "education": [
    {"school_name": "Harvard University", "start": 1973, "end": 1975},
    {"school_name": "Lakeside School, Seattle", "start": null, "end": null}
  ],
  "contact_info": {
    "blog": "http://thegatesnotes.com",
    "twitter": "http://twitter.com/BillGates" 
  }
}

Документные базы данных

Документы могут хранить вложенные документы и массивы, что позволяет не иметь one-to-many и many-to-many связей

Schemaless

Документы не имеет четко выраженной схемы, что для некоторых приложений является гибким решением

Robo 3T(Robomongo)

Mongo Shell

  • JavaScript интерфейс для работы с MongoDB
  • Переключение между БД
  • Объявление и редактирование функций
use addressdb;

db.getCollectionNames();
db.addresses.dataSize();

Базовые структуры

  • Данные в MongoDB хранятся в документах
  • Документы используют JSON нотацию
  • Документы сгруппированы в коллекции
  • Коллекции сгруппированы в базы

 

Mongo CRUD

db.inventory.insertMany([
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
   { qty: 32, size: { h: 13, w: 11.25, uom: "cm" }, status: "B" }
]);

Инициализация

db.{name}.find()

db.inventory.find( { status: { $in: [ "A", "D" ] } } )
db.inventory.find( { status: "A", qty: { $lt: 30 } } )
db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )
db.inventory.find( {
     status: "A",
     $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )
db.inventory.find( { "size.uom": "in" } )
db.inventory.find( { item : { $exists: false } } )

db.{name}.update()

db.collection.updateOne(<filter>, <update>, <options>)
db.collection.updateMany(<filter>, <update>, <options>)
db.inventory.updateOne(
   { item: "paper" },
   {
     $set: { "size.uom": "cm", status: "P" },
   }
)
db.inventory.updateMany(
   { "qty": { $lt: 50 } },
   {
     $set: { "size.uom": "in", status: "P" },
   }
)

db.{name}.delete()

db.inventory.deleteMany({ status : "A" })
db.inventory.deleteOne( { status: "D" } )

Paralect Stack(node mongo + koa api starter)

Made with Slides.com