Влад Комодей
MongoDB
NoSQL
Нормальные формы
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
use addressdb;
db.getCollectionNames();
db.addresses.dataSize();Базовые структуры
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)