---
title: 'Abstrakt maʼlumotlar qatlami'
section: 'Concepts'
weight: 2
description: Abstrakt maʼlumotlar qatlami, yagona tizim maʼlumotlar modeli, jihozlarni abstraktlash va ilovalarni jismoniy saqlashdan ajratuvchi maʼlumotlarni normallashtirish.
related:
  - basic-modules/modules
  - data-representation/components
  - architecture/data-collection-layer
  - rest-api
---

Abstrakt maʼlumotlar qatlami maʼlumotlarning jismoniy saqlanishi va undan foydalanadigan ilovalar oʻrtasida joylashadi. U jismoniy amalga oshirilishi va apparatga oid xususiyatlardan mavhumlashtiradi hamda maʼlumotlar bilan ishlash uchun yagona interfeysni taqdim etadi. U quyidagilarni beradi:

- **Apparatdan mustaqillik**: Maʼlumotlar turli qurilmalarda (serverlar, bulut, IoT qurilmalari) saqlanadi, biroq ilova ular bilan yagona interfeys orqali oʻzaro aloqada boʻladi.
- **Soddalashtirilgan ishlab chiqish**: Ishlab chiquvchilar jismoniy saqlash tafsilotlari haqida oʻylamasdan abstrakt obyektlar bilan ishlaydi.
- **Moslashuvchanlik**: Maʼlumotlarning jismoniy tuzilmasidagi oʻzgarishlar (masalan, bulutga koʻchirish) ilovalarga taʼsir qilmaydi.

## Yagona maʼlumotlar modeli

Tizim turli xil jihoz turlariga moslashtirilgan yagona maʼlumotlar modelidan foydalanadi va ularning manbai yoki jihoz turidan qatʼi nazar, ular bilan bir xil tarzda ishlash imkonini beradi. U umumiy maʼlumotlar tuzilmalarini, bir xil qayta ishlash qoidalarini hamda barcha tizim va quyi tizimlar boʻylab maʼlumotlarning semantik izchilligini oʻz ichiga oladi.

Masalan, yagona tizim maʼlumotlar modeli quyidagilarni oʻz ichiga oladi:

- **Obyektlar**: Jihozlar, kanallar, seanslar, oʻlchov birliklari va maʼlumotnoma parametrlari.
- **Aloqalar**: Jihozda kanallar boʻladi, kanallar maʼlumotlar bilan, maʼlumotlar esa seanslar bilan bogʻlangan.
- **Atributlar**: Har bir obyekt uchun atributlar belgilanadi (masalan, `equipment.serial_number` va `channel_data.value`).

### Yagona tizim maʼlumotlar modelining tuzilmasi

Yagona tizim maʼlumotlar modeli jihozlar, kanallar, seanslar va oʻlchovlarga oid maʼlumotlarni saqlash va boshqarish uchun moʻljallangan tuzilmadir. Har bir jadval va uning vazifasini, shuningdek ular oʻrtasidagi aloqalarni koʻrib chiqamiz.

#### `channel_data` jadvali

Bu jadval maʼlum seanslar doirasida jihoz kanallaridan olingan maʼlumotlarni saqlaydi.

| Maydon            | Tur                              | Tavsif                                          |
| ----------------- | -------------------------------- | ----------------------------------------------- |
| `id`              | `bigint`                         | Yozuvning yagona identifikatori (asosiy kalit). |
| `equipment_id`    | `bigint`                         | Jihozga havola (`equipment.id`).                |
| `seance_id`       | `bigint`                         | Seansga havola (`seances.id`).                  |
| `channel_id`      | `bigint`                         | Kanalga havola (`channels.id`).                 |
| `unit_id`         | `bigint`                         | Oʻlchov birligiga havola (`units.id`).          |
| `archive_type_id` | `integer`                        | Arxiv turiga havola (`referenceparameters.id`). |
| `event_time`      | `integer`                        | Hodisa vaqti (masalan, vaqt belgisi).           |
| `value`           | `character varying(100)`         | Kanaldan olingan qiymat.                        |
| `created_at`      | `timestamp(6) without time zone` | Yozuv yaratilgan vaqt.                          |
| `updated_at`      | `timestamp(6) without time zone` | Yozuv oxirgi marta yangilangan vaqt.            |

Aloqalar:

- `unit_id` tashqi kaliti `units` jadvaliga havola qiladi.
- `archive_type_id` tashqi kaliti `referenceparameters` jadvaliga havola qiladi.
- `equipment_id` tashqi kaliti `equipment` jadvaliga havola qiladi.
- `channel_id` tashqi kaliti `channels` jadvaliga havola qiladi.
- `seance_id` tashqi kaliti `seances` jadvaliga havola qiladi.

#### `units` jadvali

Bu jadval kanal maʼlumotlari uchun ishlatiladigan oʻlchov birliklarini saqlaydi.

| Maydon              | Tur                              | Tavsif                                          |
| ------------------- | -------------------------------- | ----------------------------------------------- |
| `id`                | `bigint`                         | Yozuvning yagona identifikatori (asosiy kalit). |
| `name`              | `character varying(30)`          | Oʻlchov birligining nomi.                       |
| `varname`           | `character varying(30)`          | Oʻlchov birligi uchun qisqa oʻzgaruvchi nomi.   |
| `description`       | `character varying(100)`         | Oʻlchov birligining tavsifi.                    |
| `conversion_factor` | `double precision`               | Oʻlchov birligi uchun oʻtkazish koeffitsiyenti. |
| `rounding`          | `smallint`                       | Yaxlitlash uchun oʻnli kasr xonalari soni.      |
| `synonyms`          | `character varying[]`            | Oʻlchov birligi sinonimlari massivi.            |
| `created_at`        | `timestamp(6) without time zone` | Yozuv yaratilgan vaqt.                          |
| `updated_at`        | `timestamp(6) without time zone` | Yozuv oxirgi marta yangilangan vaqt.            |

#### `referenceparameters` jadvali

Bu jadval arxiv turlari yoki boshqa kvalifikatorlar kabi maʼlumotnoma parametrlarini saqlaydi.

| Maydon              | Tur                              | Tavsif                                          |
| ------------------- | -------------------------------- | ----------------------------------------------- |
| `id`                | `bigint`                         | Yozuvning yagona identifikatori (asosiy kalit). |
| `name`              | `character varying(30)`          | Oʻlchov birligining nomi.                       |
| `varname`           | `character varying(30)`          | Oʻlchov birligi uchun qisqa oʻzgaruvchi nomi.   |
| `description`       | `character varying(100)`         | Oʻlchov birligining tavsifi.                    |
| `parent_id`         | `integer`                        | Ota-parametrga havola (iyerarxiya).             |
| `referencemodel_id` | `integer`                        | Maʼlumotnoma modeliga havola.                   |
| `created_at`        | `timestamp(6) without time zone` | Yozuv yaratilgan vaqt.                          |
| `updated_at`        | `timestamp(6) without time zone` | Yozuv oxirgi marta yangilangan vaqt.            |
| `deleted_at`        | `timestamp(6) without time zone` | Yozuv oʻchirilgan vaqt (yumshoq oʻchirish).     |

Aloqalar:

- `parent_id` tashqi kaliti oʻsha jadvalning oʻziga (`referenceparameters.id`) havola qiladi va shu orqali iyerarxiyalar tuzish imkonini beradi.

#### `equipment` jadvali

| Maydon              | Tur                              | Tavsif                                          |
| ------------------- | -------------------------------- | ----------------------------------------------- |
| `id`                | `bigint`                         | Yozuvning yagona identifikatori (asosiy kalit). |
| `equipment_type_id` | `bigint`                         | Jihoz turiga havola.                            |
| `serial_number`     | `character varying(25)`          | Jihozning seriya raqami.                        |
| `manufacture_date`  | `timestamp(6) without time zone` | Jihozning ishlab chiqarilgan sanasi.            |
| `installation_date` | `timestamp(6) without time zone` | Jihozning oʻrnatilgan sanasi.                   |
| `program_version`   | `character varying(100)`         | Jihozning dasturiy taʼminot versiyasi.          |
| `created_at`        | `timestamp(6) without time zone` | Yozuv yaratilgan vaqt.                          |
| `updated_at`        | `timestamp(6) without time zone` | Yozuv oxirgi marta yangilangan vaqt.            |

#### `channels` jadvali

Bu jadval jihoz kanallari haqidagi maʼlumotlarni saqlaydi.

| Maydon              | Tur                              | Tavsif                                          |
| ------------------- | -------------------------------- | ----------------------------------------------- |
| `id`                | `bigint`                         | Yozuvning yagona identifikatori (asosiy kalit). |
| `equipment_type_id` | `bigint`                         | Jihoz turiga havola (`equipment_type.id`).      |
| `unit_id`           | `bigint`                         | Oʻlchov birligiga havola (`units.id`).          |
| `name`              | `character varying(100)`         | Kanal nomi.                                     |
| `varname`           | `character varying(20)`          | Kanal uchun qisqa oʻzgaruvchi nomi.             |
| `created_at`        | `timestamp(6) without time zone` | Yozuv yaratilgan vaqt.                          |
| `updated_at`        | `timestamp(6) without time zone` | Yozuv oxirgi marta yangilangan vaqt.            |

Aloqalar:

- `equipment_type_id` tashqi kaliti `equipment_type` jadvaliga havola qiladi.
- `unit_id` tashqi kaliti `units` jadvaliga havola qiladi.

#### `seances` jadvali

Bu jadval jihozning aloqa seanslari haqidagi maʼlumotlarni saqlaydi.

| Maydon         | Tur                              | Tavsif                                          |
| -------------- | -------------------------------- | ----------------------------------------------- |
| `id`           | `bigint`                         | Yozuvning yagona identifikatori (asosiy kalit). |
| `telemetry_id` | `bigint`                         | Telemetriyaga havola (`telemetry.id`).          |
| `event_time`   | `integer`                        | Hodisa vaqti.                                   |
| `evtid`        | `smallint`                       | Hodisa identifikatori.                          |
| `trycnt`       | `smallint`                       | Urinishlar soni.                                |
| `tryfl`        | `character varying(12)`          | Urinish bayrogʻi.                               |
| `state`        | `smallint`                       | Seans holati.                                   |
| `btm`          | `integer`                        | Batareya zaryadi.                               |
| `rssi`         | `integer`                        | Signal kuchi (agar ishlatilsa).                 |
| `created_at`   | `timestamp(6) without time zone` | Yozuv yaratilgan vaqt.                          |
| `updated_at`   | `timestamp(6) without time zone` | Yozuv oxirgi marta yangilangan vaqt.            |

#### Umumiy tuzilma va aloqalar

**Asosiy jadval** — `channel_data`, u kanal maʼlumotlarini jihozlar, seanslar va oʻlchov birliklari bilan bogʻlaydi.

**Aloqa jadvallari**:

- `units` — oʻlchov birliklari.
- `referenceparameters` — arxiv turlari va boshqa kvalifikatorlar.

**Jihoz jadvallari**:

- `equipment` — jihozlar haqidagi maʼlumot.
- `channels` — jihoz kanallari.

**Seanslar jadvali** — `seances`, u aloqa seanslari haqidagi maʼlumotlarni saqlaydi.

**Foydalanish misoli**:

- Kanal maʼlumotlari (`channel_data`) maʼlum seanslar (`seances`) doirasida jihozdan (`equipment`) keladi.
- Har bir kanalning (`channels`) oʻz oʻlchov birligi (`units`) boʻladi.
- Arxiv turi (`referenceparameters`) maʼlumotlar qanday saqlanishi yoki qayta ishlanishi kerakligini belgilaydi.

### Yagona modelning afzalliklari

Bu maʼlumotlar modeli turli jihozlardan kelgan maʼlumotlarni saqlash va tahlil qilish uchun moslashuvchanlik va miqyoslanuvchanlikni taʼminlaydi.

Yagona maʼlumotlar modelining baʼzi afzalliklari:

- **Izchillik**: Maʼlumotlar barcha tizimlar boʻylab bir xil tuzilma va semantikaga ega.
- **Miqyoslanuvchanlik**: Yangi maʼlumot manbalari yoki jihoz turlarini qoʻshish oson.
- **Maʼlumotlarni himoyalash**: Yagona autentifikatsiya, avtorizatsiya va shifrlash mexanizmlari.
- **Soddalashtirilgan tahlil**: Maʼlumotlarni yagona vositalar bilan tahlil qilish mumkin.

## Jihozlarni abstraktlash

Jihozlarni abstraktlash — bu maʼlumotlar bilan ishlash mantigʻini jihozning jismoniy xususiyatlaridan ajratuvchi tizim dizaynining muhim tamoyilidir. Bu ayniqsa har xil qurilmalardan foydalanadigan tizimlarda muhimdir.

Jihozlarni abstraktlash tizim maʼlumotlarni mantiqiy darajada, yaʼni maʼlumotlar saqlanadigan yoki qayta ishlanadigan jismoniy qurilmalardan mustaqil ravishda boshqarishini bildiradi. Bunga quyidagilar orqali erishiladi:

- **Interfeyslarni unifikatsiyalash**: Jihozdan qatʼi nazar, maʼlumotlarga kirishning yagona usuli.
- **Amalga oshirish tafsilotlarini yashirish**: Maʼlumotlarning jismoniy joylashuvi, uzatish protokollari va boshqa texnik jihatlar ilovalardan yashiriladi.
- **Adapterlar**: Maʼlumotlarni jihozga xos formatdan yagona formatga oʻtkazish.

### Jihozlarni abstraktlashni amalga oshirish

Quyidagi misol ushbu yondashuv bizning tizimimizda qanday amalga oshirilishini koʻrsatadi. U maʼlumotlarning IoT qurilmasidan adapter orqali yagona maʼlumotlar modeliga oʻtishini va API orqali chiqishini kuzatadi.

Gaz sarfi maʼlumotlarini yuboradigan IoT qurilmasini koʻrib chiqaylik. Amalga oshirilgan algoritmlar bizga quyidagilarga imkon beradi:

- Maʼlumotlarni qurilmadan adapter orqali olish.
- Uni `channel_data` tuzilmasiga aylantirish.
- Uni maʼlumotlar bazasida saqlash.
- Maʼlumotlarga API orqali kirishni taʼminlash.

Har bir jihoz turi uchun qurilmaga xos protokollarni qayta ishlaydigan va maʼlumotlarni yagona formatga oʻtkazadigan adapterlar yaratiladi.

**Misol: maʼlumotlarni oʻzgartirish**

IoT qurilmasi uchun maʼlumotlar JSON formatida kelishi mumkin:

```json title="example.json"
{
  "device_id": "sensor-123",
  "timestamp": 1739950861,
  "value": 42.5
}
```

Adapter maʼlumotlarni `channel_data` tuzilmasiga aylantiradi:

```sql title="example.sql"
INSERT INTO channel_data (equipment_id, seance_id, channel_id,
 archive_type_id, value, event_time)
VALUES (1, 2, 3, 4, '42.5', 1739950861);
```

Maʼlumotlar soʻrovi:

```bash title="Request example"
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3
```

Javob:

```json title="Response example"
[
  {
    "id": 123,
    "equipment_id": 1,
    "seance_id": 2,
    "channel_id": 3,
    "archive_type_id": 4,
    "value": 42.5,
    "event_time": 1739950861
  }
]
```

### Jihozlarni abstraktlashning afzalliklari

- **Apparatdan mustaqillik**: Ilovalar maʼlumotlar jismonan qayerda joylashganini bilmasdan ular bilan ishlaydi.
- **Moslashuvchanlik**: Yangi qurilmalarni oson qoʻshish yoki mavjudlarini oʻzgartirish.
- **Soddalashtirilgan ishlab chiqish**: Ishlab chiquvchilar apparat tafsilotlari haqida oʻylamasdan abstrakt obyektlar bilan ishlaydi.
- **Miqyoslanuvchanlik**: Maʼlumotlar turli qurilmalarda saqlanishi mumkin, biroq tizim bir xil tarzda ishlashda davom etadi.

## Maʼlumotlarni normallashtirish

Maʼlumotlarni normallashtirish — bu maʼlumotlar bazasidagi maʼlumotlarni ortiqchalikni eng kam darajaga keltiradigan va maʼlumotlar yaxlitligini yaxshilaydigan tarzda tartibga solish jarayonidir. Abstrakt maʼlumotlar qatlami kontekstida normallashtirish turli xil jihoz turlari va maʼlumot manbalarini qayta ishlashda foydalanish mumkin boʻlgan yagona, samarali maʼlumotlar modelini yaratishda muhim rol oʻynaydi.

Maʼlumotlarni normallashtirish maʼlumotlarni mantiqiy jadvallarga ajratadi va ular oʻrtasida aloqalar oʻrnatadi, buning maqsadi:

- Takrorlanadigan maʼlumotlarni bartaraf etish.
- Maʼlumotlarni saqlash va yangilashni soddalashtirish.
- Maʼlumotlar yaxlitligini taʼminlash.
- Soʻrovlar unumdorligini oshirish.

Tizimning yagona maʼlumotlar modeli atomar (skalyar) qiymatlar boʻyicha (uchinchi) Boyce-Codd normal shakliga keltirilgan. Baʼzi maʼlumotlar modeli obyektlari kam uchraydigan, nostandart atributlarni qayta ishlashni optimallashtirish uchun tarkibiy tuzilmalardan foydalanadi.

### Normallashtirishning afzalliklari

- **Ortiqchalikni yoʻqotadi**: Maʼlumotlar bir joyda saqlanadi va bu ortiqchalikni kamaytiradi.
- **Maʼlumotlar izchilligi**: Maʼlumotlar izchilligini taʼminlash soddalashadi.
- **Moslashuvchanlik**: Maʼlumotlar tuzilmasiga oʻzgartirishlar kiritish oson.
- **Unumdorlik**: Soʻrovlar unumdorligi yaxshilanadi (aksariyat hollarda).

### Abstrakt maʼlumotlar qatlami kontekstida normallashtirish

Maʼlumotlarni normallashtirish abstrakt maʼlumotlar qatlamini loyihalashdagi muhim qadamdir.

U sizga quyidagilarga imkon beradi:

- Turli xil jihoz turlarini qayta ishlashda foydalanish mumkin boʻlgan yagona maʼlumotlar modelini yaratish.
- Maʼlumotlarning ortiqchaligi va takrorlanishini bartaraf etish.
- Manbasidan qatʼi nazar, maʼlumotlar yaxlitligi va izchilligini taʼminlash.
- Yangi qurilmalar va tizimlarni integratsiya qilishni soddalashtirish.
