# База данных

В системе используются несколько баз данных, что с одной стороны добавляет сложность, но с другой стороны позволяет максимально удобно использовать преимущества различных баз данных. В основе системы располагается sql-база, основное назначение которой - хранение первичных данных. Основные требования к sql базе данных - умение хранить и индексировать большие объёмы данных. Следующий слой MongoDb - объектная база данных. Основное назначение - хранение справочников и настроек системы. Данная база данных используется в связи с её гибким подходом к структуре документов, а на этом построены механизмы изоляции работы по настройке для различных пользователей - режим "песочница". Последняя база данных используется исключительно для кэширования данных - Redis. Ниже будут подробно описаны способы взаимодействия с базами данных.

## Описание работы с SQL базой данных <a href="#opisanie-raboty-s-sql-bazoi-dannykh" id="opisanie-raboty-s-sql-bazoi-dannykh"></a>

В системе JetCalc используется SQL-база PostgreSQL для хранения первичных данных и курсов валют, в которой взаимодействие осуществляется по протоколу JSON.

## API <a href="#api" id="api"></a>

SetValutaRates (array, done) - запись курсов валют

```javascript
db.SetValutaRates([{
    CodeValutaRate:"...",
    CodeValuta:"...",
    CodeReportValuta:"...",
    CodeReportValuta1:"...",
    CodeReportValuta2:"...",
    Year:2017,
    CodePeriod:"...",
    Value:1,
    Value1:2,
    Value2:3,
    CodeUser:"..."
}],function(err){ ... })
```

SetCells(array,done) - Запись значений ячеек

```javascript
db.SetCells([
   { CodeCell:"...",CodeUser:"...",Comment:"...",CalcValue:"...",Value:"...",CodeValuta:"..."},
],function(err){
   ...
});
```

GetCells(array,array) - получение первичных данных

```javascript
db.GetCells(['CodeCell','Value','CalcValue'],[{CodeCell:"..."},{CodeCell:"..."}],
function(err,data){...})
```

GetCellsHistory(array,array) - получение истории изменений первичных данных

```javascript
db.GetCellsHistory(['CodeCell','Value','CalcValue'],[{CodeCell:"..."},{CodeCell:"..."}],
function(err,data){...})
```
