Bu gün PostgreSQL-də rəqəmsal data tipləri barədə danışacağıq. Əgər heç vaxt "42" kimi bir rəqəmi, maliyyə hesablamalarını və ya bəlkə də millisekundları necə saxlamaq barədə düşünmüsənsə, düz yerə gəlmisən. Gəlin baxaq, hansı tip hansı işə yarayır ki, sən və dataların rahat olsun.
PostgreSQL-də rəqəmsal data tipləri əsasən üç qrupa bölünür:
- Tam ədədlər (
INTEGER): vergül hissəsi olmayan ədədləri saxlamaq üçün. Məsələn, 1, 42, -7 kimi adi ədədlər. - Dəqiq ədədlər (
NUMERIC): vergüldən sonra sabit sayda rəqəmlə ədədləri saxlamaq üçün. Maliyyə hesablamalarında çox vacibdir, çünki dəqiqlik bəzən həyatdan da vacib olur. - Üzən vergüllü ədədlər (
REAL): çox böyük və ya çox kiçik ədədləri saxlamaq üçün.NUMERIC-dən az dəqiqdir, amma elmi hesablamalar üçün idealdır.
INTEGER tipi
INTEGER — tam ədədlər üçün data tipidir. Vergül hissəsi olmayan ədədləri saxlamaq lazım olanda istifadə olunur. PostgreSQL-də INTEGER-in üç növü var ki, müxtəlif diapazonları əhatə etsin:
SMALLINT: kiçik tam ədəd tipi. Diapazon: -32,768-dən 32,767-ə qədər.INTEGER(və yaINT): standart tam ədəd tipi. Diapazon: -2,147,483,648-dən 2,147,483,647-ə qədər.BIGINT: böyük ədədlər üçün. Diapazon: -9,223,372,036,854,775,808-dən 9,223,372,036,854,775,807-ə qədər.
Təsəvvür elə ki, bizdə students adlı bir cədvəl var, burada tələbələrin adı, yaşı və topladıqları kreditlərin (akademik balların) sayı saxlanılır:
| id | name | age | credits |
|---|---|---|---|
| 1 | Otto Nate | 21 | 30 |
| 2 | Maria Chi | 22 | 45 |
| 3 | Peter Val | 20 | 60 |
| 4 | Anna Song | 23 | 50 |
| 5 | Sophie Zhang | 21 | 35 |
İndi sadə bir SQL-sorgusu ilə tələbələrin adını, yaşını və kreditlərini çıxaraq:
SELECT name, age, credits
FROM students;
Nəticə:
| name | age | credits |
|---|---|---|
| Otto Nate | 21 | 30 |
| Maria Chi | 22 | 45 |
| Peter Val | 20 | 60 |
| Anna Song | 23 | 50 |
| Sophie Zhang | 21 | 35 |
INTEGER nə vaxt istifadə olunur?
- İdentifikatorların (
id, sifariş nömrəsi və s.) saxlanması üçün. - Hər hansı bir şeyin miqdarını saxlamaq üçün (məsələn, anbardakı məhsul sayı, tələbə sayı və s.).
NUMERIC tipi
NUMERIC — sabit vergüllü dəqiq ədədlər üçün data tipidir. Əgər 123.456 kimi bir şeyi saxlamaq lazımdırsa və bir rəqəm səhvi sənə nüfuz və ya pul başa gələ bilərsə, NUMERIC istifadə et.
Yazılış forması: NUMERIC(precision, scale), burada:
precision— ümumi rəqəmlərin sayı (vergüldən əvvəl və sonra olanlar daxil).scale— vergüldən sonra olan rəqəmlərin sayı.
Məsələn, NUMERIC(6, 2) maksimum 6 rəqəmli və onlardan 2-si vergüldən sonra olan ədədləri saxlamağa imkan verir.
Gəlin maliyyə tranzaksiyaları üçün bir cədvəl yaradaq:
| id | description | amount |
|---|---|---|
| 1 | Təhsil üçün ödəniş | 2345.67 |
| 2 | Aylıq təqaüd | 500.00 |
| 3 | Laboratoriya haqqı | 145.99 |
| 4 | Kitabxana cəriməsi | 12.75 |
| 5 | Konfransa qeydiyyat | 320.50 |
İndi tranzaksiyaların siyahısını çıxaraq:
SELECT description, amount
FROM transactions;
Nəticə:
| description | amount |
|---|---|
| Təhsil üçün ödəniş | 2345.67 |
| Aylıq təqaüd | 500.00 |
| Laboratoriya haqqı | 145.99 |
| Kitabxana cəriməsi | 12.75 |
| Konfransa qeydiyyat | 320.50 |
NUMERIC nə vaxt istifadə olunur?
- Maliyyə hesablamaları (məhsulun qiyməti, maaş və s.).
- Dəqiq ölçülərin saxlanması (çəki, uzunluq və s.).
measurements cədvəli
| id | mass - REAL | height - REAL |
|---|---|---|
| 1 | 70.5 | 1.83 |
| 2 | 64.2 | 1.75 |
| 3 | 82.3 | 1.92 |
| 4 | 55.0 | 1.60 |
İndi dəyərləri çıxaraq:
SELECT mass, height
FROM measurements;
Nəticə:
| mass | height |
|---|---|
| 70.5 | 1.83 |
| 64.2 | 1.75 |
| 82.3 | 1.92 |
| 55.0 | 1.60 |
REAL nə vaxt istifadə olunur?
- Elmi hesablamalar (atom kütləsi, Aya qədər məsafə və s.).
- Modeling üçün, yəni kiçik səhvlər problem deyilsə.
Rəqəmsal tiplərin müqayisəsi: nə vaxt hansını seçmək?
| Data tipi | Diapazon | Dəqiqlik | İstifadə nümunələri |
|---|---|---|---|
SMALLINT |
-32,768-dən 32,767-ə qədər | Tam ədədlər | Kiçik ədədlər (yaş, reytinqlər və s.). |
INTEGER |
-2,147,483,648-dən 2,147,483,647-ə qədər | Tam ədədlər | İdentifikatorlar, miqdarlar və s. |
BIGINT |
-9,223,372,036,854,775,808-dən 9,223,372,036,854,775,807-ə qədər | Tam ədədlər | Çox böyük ədədlər. |
NUMERIC |
precision və scale-dan asılıdır |
Dəqiq onluq ədədlər | Maliyyə, ölçülər və s. |
REAL |
Təxminən 6 onluq rəqəm | Üzən vergül | Təxmini və ya elmi datalar. |
DOUBLE PRECISION |
Təxminən 15 onluq rəqəm | Yüksək dəqiqlikli üzən vergül | Elm, tədqiqat və s. |
Alias-lar
PostgreSQL-də bir çox rəqəmsal tipin alias-ı (sinonimi) var — bunlar alternativ adlardır, eyni cür işləyir, amma oxunuşu və ya başqa DBMS-lərlə uyğunluğu yaxşılaşdırır.
Budur, PostgreSQL-də rəqəmsal tip alias-ları üçün qısa və rahat bələdçi:
Tam ədədlər üçün alias-lar
| Alias | Əsl tip | Ölçü | Diapazon |
|---|---|---|---|
INT |
INTEGER |
4 bayt | −2,147,483,648-dən 2,147,483,647-ə qədər |
INT4 |
INTEGER |
4 bayt | (köhnə alias) |
SMALLINT |
SMALLINT |
2 bayt | −32,768-dən 32,767-ə qədər |
INT2 |
SMALLINT |
2 bayt | |
BIGINT |
BIGINT |
8 bayt | −9 kvintilyon-dan +9 kvintilyon-a qədər |
INT8 |
BIGINT |
8 bayt |
Dəqiq ədədlər üçün alias-lar
| Alias | Əsl tip | Təyinat |
|---|---|---|
DEC |
NUMERIC |
SQL-standartına görə sinonim |
DECIMAL |
NUMERIC |
Eyni şey |
Üzən vergüllü ədədlər üçün alias-lar
| Alias | Əsl tip | Dəqiqlik |
|---|---|---|
FLOAT |
DOUBLE PRECISION |
~15 rəqəm (default) |
FLOAT(24) |
REAL |
~6 rəqəm |
FLOAT(53) |
DOUBLE PRECISION |
~15 rəqəm |
FLOAT8 |
DOUBLE PRECISION |
Köhnə alias |
FLOAT4 |
REAL |
Köhnə alias |
Tipik səhvlər
Rəqəmsal tiplərlə işləyərkən bir neçə tələyə düşmək olar:
Kifayət qədər böyük data tipi seçməmək. Əgər insanların yaşı üçün SMALLINT istifadə edirsənsə, səhv edirsən. "Matrix" filmindəki robotun yaşı milyonlarla ildi, ona görə inciməsin.
Ovucları itirmək (yuvarlaqlaşdırma zamanı). Maliyyə hesablamalarında REAL istifadə etsən, qəpiklər itə bilər. Sonra isə müştərilərin etibarını da itirərsən.
Fərqli tipləri müqayisə etmək. Əgər INTEGER və REAL müqayisə etsən, üzən vergüllü ədədlərin xüsusiyyətlərinə görə gözlənilməz nəticələr ala bilərsən.
GO TO FULL VERSION