PostgreSQL - Data Types ( Bahasa Melayu )

Hai daar, bakal ahli pangkalan data! ? Sertai perjalanan menarik kami ke dunia jenis data PostgreSQL. Sebagai guru sains komputer yang ramah di sebelah anda, saya begitu gembira untuk menghidangkan anda melalui topik yang menarik ini. Jangan bimbang jika anda baru dalam programming - kita akan mulakan dari asas dan maju ke arah atas. Jadi, pegang wands virtual anda (papan kekunci), dan mari kita masuk ke dalam!

PostgreSQL - Data Types

Jenis Numeric

Aha, nombor - blok bangunan pengkomputeran! PostgreSQL menawarkan pelbagai jenis numeric untuk memenuhi keperluan yang berbeza. Mari kita jelajahinya dengan beberapa contoh yang menyeronokkan.

Jenis Integer

PostgreSQL menyediakan empat jenis integer:

Jenis Saiz Simpanan Rentang
smallint 2 bytes -32768 ke +32767
integer 4 bytes -2147483648 ke +2147483647
bigint 8 bytes -9223372036854775808 ke +9223372036854775807
serial 4 bytes 1 ke 2147483647

Mari kita ciptakan jadual untuk menyimpan maklumat tentang buku kegemaran kita:

CREATE TABLE favorite_books (
id serial PRIMARY KEY,
title VARCHAR(100),
publication_year smallint,
pages integer,
isbn bigint
);

Dalam contoh ini:

  • id menggunakan serial, yang secara automatik meningkat untuk setiap masukan baru.
  • publication_year menggunakan smallint kerana buku tidak begitu tua (maaf, gulungan purba!).
  • pages menggunakan integer untuk panjang buku.
  • isbn menggunakan bigint untuk nombor ISBN yang panjang.

Jenis Titik Apung

Untuk saat anda memerlukan ketepatan desimal:

Jenis Keterangan
real 6 digit ketepatan desimal
double precision 15 digit ketepatan desimal

Mari kita tambah beberapa detail lagi ke jadual buku kita:

ALTER TABLE favorite_books
ADD COLUMN rating real,
ADD COLUMN price double precision;

Sekarang kita boleh menyimpan penarahan buku (contohnya, 4.5 bintang) dan harga yang tepat.

Nombor Arbitrari

Untuk saat anda memerlukan ketepatan ekstrim:

CREATE TABLE scientific_constants (
name VARCHAR(50),
value numeric(1000, 900)
);

INSERT INTO scientific_constants (name, value)
VALUES ('Pi', 3.14159265358979323846264338327950288419716939937510);

numeric(1000, 900) membolehkan sehingga 1000 digit keseluruhan dengan 900 selepas titik perpuluhan. Sempurna untuk para penggemar pi!

Jenis Wang

Uang membuat dunia berputar, dan PostgreSQL ada jenis yang sesuai untuk itu:

CREATE TABLE product_prices (
product_name VARCHAR(50),
price money
);

INSERT INTO product_prices (product_name, price)
VALUES ('Fancy Pen', '$9.99');

Jenis money secara automatik mengurus simbol matawang dan pemisah koma.

Jenis Karakter

Teks ada di mana-mana dalam pangkalan data. PostgreSQL menyediakan tiga jenis karakter utama:

Jenis Keterangan
character(n) Panjang tetap, diisi spasi
varchar(n) Panjang variabel dengan had
text Panjang tak terbatas variabel

Mari kita gunakan ini dalam pangkalan data buku kita:

ALTER TABLE favorite_books
ADD COLUMN author character(50),
ADD COLUMN description varchar(500),
ADD COLUMN full_text text;
  • author tetap 50 aksara (harap ini cukup untuk "J.K. Rowling"!).
  • description boleh berubah tetapi tidak akan melebihi 500 aksara.
  • full_text boleh menyimpan keseluruhan buku jika kita mahu (tetapi jangan, kan?).

Jenis Data Binary

kadang-kadang, anda perlu menyimpan data binary mentah. Masuk bytea:

ALTER TABLE favorite_books
ADD COLUMN cover_image bytea;

-- Memasukkan imej (ber fikir ini adalah data binary sebenar)
UPDATE favorite_books
SET cover_image = '\x89504E470D0A1A0A'
WHERE id = 1;

Ini membolehkan kita menyimpan imej kulit buku langsung dalam pangkalan data.

Jenis Data Tarikh/Waktu

Waktu adalah penting, dan PostgreSQL menepatiinya:

Jenis Keterangan
date Tarikh (tanpa masa sepanjang hari)
time Masa sepanjang hari (tanpa tarikh)
timestamp Kedua-dua tarikh dan masa
interval Selang masa

Mari kita jejak bila kita membaca buku kegemaran kita:

ALTER TABLE favorite_books
ADD COLUMN purchase_date date,
ADD COLUMN reading_start_time time,
ADD COLUMN last_read timestamp,
ADD COLUMN reading_duration interval;

UPDATE favorite_books
SET purchase_date = '2023-04-01',
reading_start_time = '20:30:00',
last_read = '2023-04-15 22:15:30',
reading_duration = '2 hours 30 minutes'
WHERE id = 1;

Sekarang kita boleh menganalisis tabiat membaca kita! ?⏱️

Jenis Boolean

Benar atau salah, 1 atau 0, ya atau tidak - kadang-kadang kehidupan adalah binari:

ALTER TABLE favorite_books
ADD COLUMN is_favorite boolean;

UPDATE favorite_books
SET is_favorite = true
WHERE rating > 4.5;

Ringkas dan berkesan!

Jenis Enumerated

Saat anda mempunyai set tetap pilihan, enums adalah teman baik anda:

CREATE TYPE book_genre AS ENUM ('Fiction', 'Non-Fiction', 'Science', 'History');

ALTER TABLE favorite_books
ADD COLUMN genre book_genre;

UPDATE favorite_books
SET genre = 'Fiction'
WHERE id = 1;

Tidak lagi kesalahan mengetik jenis genre!

Jenis Geometric

Untuk semua penggemar bentuk di sana:

CREATE TABLE geometric_objects (
id serial PRIMARY KEY,
name VARCHAR(50),
location point,
area box
);

INSERT INTO geometric_objects (name, location, area)
VALUES ('My House', '(10,20)', '((0,0),(100,100))');

Sempurna untuk memapping campaign Dungeons & Dragons anda!

JenisAlamat Rangkaian

Dalam dunia yang terhubung, menyimpan maklumat rangkaian adalah penting:

CREATE TABLE network_devices (
id serial PRIMARY KEY,
name VARCHAR(50),
ip inet,
mac macaddr
);

INSERT INTO network_devices (name, ip, mac)
VALUES ('My Router', '192.168.1.1', '08:00:2b:01:02:03');

Sekarang anda boleh menguruskan semua peranti di rangkaian anda!

Jenis Bit String

Kadang-kadang, anda hanya perlu bekerja dengan bit mentah:

CREATE TABLE permissions (
user_id integer,
access_flags bit(8)
);

INSERT INTO permissions (user_id, access_flags)
VALUES (1, B'10110000');

Setiap bit boleh mewakili izin berbeza. Bagaimana itu untuk penyimpanan yang efisien?

Jenis Pencarian Teks

PostgreSQL mempunyai sokongan built-in untuk pencarian teks penuh:

ALTER TABLE favorite_books
ADD COLUMN search_vector tsvector;

UPDATE favorite_books
SET search_vector = to_tsvector('english', title || ' ' || description);

CREATE INDEX textsearch_idx ON favorite_books USING GIN (search_vector);

Sekarang anda boleh melakukan pencarian cepat di koleksi buku anda!

Jenis UUID

Universally Unique Identifiers adalah hebat untuk sistem distribusi:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE distributed_data (
id uuid DEFAULT uuid_generate_v4(),
data TEXT
);

INSERT INTO distributed_data (data) VALUES ('Some distributed data');

Tidak lagi khawatir tentang taburan ID di antara peladen berbeza!

Jenis XML

Untuk saat anda perlu menyimpan data XML terstruktur:

CREATE TABLE xml_documents (
id serial PRIMARY KEY,
doc xml
);

INSERT INTO xml_documents (doc)
VALUES (
'<book>
<title>PostgreSQL for Beginners</title>
<author>Your Favorite Teacher</author>
</book>'
);

XML dalam pangkalan data? Mengapa tidak!

Jenis JSON

Dalam era perkhidmatan web, JSON adalah raja:

ALTER TABLE favorite_books
ADD COLUMN metadata jsonb;

UPDATE favorite_books
SET metadata = '{"tags": ["educational", "fun"], "reviews": [{"user": "Alice", "rating": 5}, {"user": "Bob", "rating": 4}]}'
WHERE id = 1;

Jenis jsonb membolehkan penyimpanan dan penqueryan data JSON yang efisien.

Jenis Array

Kadang-kadang, anda perlu menyimpan nilai ganda dalam satu kolom:

ALTER TABLE favorite_books
ADD COLUMN keywords text[];

UPDATE favorite_books
SET keywords = ARRAY['database', 'programming', 'awesome']
WHERE id = 1;

Array membolehkan anda menyimpan senarai nilai tanpa membuat jadual yang terpisah.

Jenis Composite

Buat jenis custom anda sendiri dengan menggabungkan jenis yang sedia ada:

CREATE TYPE address AS (
street VARCHAR(100),
city VARCHAR(50),
country VARCHAR(50)
);

ALTER TABLE favorite_books
ADD COLUMN publisher_address address;

UPDATE favorite_books
SET publisher_address = ROW('123 Book St', 'Libraryville', 'Bookland')
WHERE id = 1;

Jenis composite membantu anda mengatur data yang berkaitan lebih logik.

Jenis Range

Saat anda perlu mewakili rentang nilai:

CREATE TABLE hotel_bookings (
id serial PRIMARY KEY,
room_number integer,
stay daterange
);

INSERT INTO hotel_bookings (room_number, stay)
VALUES (101, '[2023-07-01, 2023-07-07)');

Jenis daterange membuatnya mudah untuk memeriksa booking yang berselang.

Jenis Penyemak Object

Jenis ini digunakan secara dalaman oleh PostgreSQL:

CREATE TABLE table_info (
table_name VARCHAR(50),
oid oid
);

INSERT INTO table_info (table_name, oid)
SELECT 'favorite_books', 'favorite_books'::regclass::oid;

Walaupun anda mungkin tidak menggunakan ini sering, mereka adalah penting untuk operasi dalaman PostgreSQL.

Jenis Pseudo

Jenis ini bukan jenis sebenar, tetapi mereka digunakan dalam deklarasi fungsi:

CREATE FUNCTION multiply_any(anyelement, anyelement)
RETURNS anyelement AS $$
SELECT $1 * $2;
$$ LANGUAGE SQL;

SELECT multiply_any(5, 3);  -- Mengembalikan 15
SELECT multiply_any(5.5, 2);  -- Mengembalikan 11.0

Jenis pseudo seperti anyelement membolehkan deklarasi fungsi yang lebih fleksibel.

Dan itu lah, murid-murid yang ramah! Kita telah menjelajah lingkungan luas jenis data PostgreSQL. Ingat, memilih jenis data yang betul adalah penting untuk prestasi, efisiensi penyimpanan, dan integriti data. Itu seperti memilih alat yang betul untuk kerja - anda tidak akan menggunakan palu untuk menggantung gambar, kan?

Sekarang, teruskan perjalanan PostgreSQL anda, anda akan temui banyak nuansa dan trik dengan jenis data ini. Tetap cuba, stays curious, dan terutama, bersenang-senang dengan pangkalan data anda! Siapa tahu, anda mungkin menjadi ahli pangkalan data yang berikutnya di bandar anda. ?‍♂️?

Sekarang, pergi dan ciptakan pangkalan data yang menakjubkan! Dan ingat, di dunia PostgreSQL, setiap jenis data mempunyai tempatnya - seperti bagaimana setiap buku mempunyai tempatnya di rak buku. Selamat coding! ??

Credits: Image by storyset