PostgreSQL / Өгөгдлийн сан ба хүснэгт үүсгэх

Өгөгдлийн сан ба хүснэгт үүсгэх

Одоо бодит зүйл эхэлж байна! Энэ хичээлд өөрийн өгөгдлийн сан, хүснэгт үүсгэж, мэдээлэл хадгалах орон зайгаа бэлдэнэ. PostgreSQL-ийн бүтцийг ойлговол бусад бүх зүйл хялбар болно.

PostgreSQL-ийн бүтэц

PostgreSQL-д мэдээлэл дараах шатлалаар зохион байгуулагддаг:

код
PostgreSQL сервер
└── Өгөгдлийн сан (database)
    └── Schema
        └── Хүснэгт (table)
            └── Бичлэг (row)

Нэг сервер дээр олон өгөгдлийн сан байж болно. Жишээ нь: blog_db, shop_db, users_db зэрэг тус тусдаа байна.

schema гэдэг нь хүснэгтүүдийг бүлэглэх хавтас мэт зүйл юм. Өгөгдмөлөөр public schema ашиглагддаг тул эхэндээ түүнийгтөлөөлж ойлгоно.

Өгөгдлийн сан үүсгэх

sql
CREATE DATABASE blog_db;

Шалгах:

код
postgres=# \l

Өгөгдлийн сан руу орох:

код
postgres=# \c blog_db
You are now connected to database "blog_db" as user "postgres".
blog_db=#

Өгөгдлийн санг устгах (болгоомжтой — бүх мэдээлэл устана!):

sql
DROP DATABASE blog_db;

Хүснэгт үүсгэх — CREATE TABLE

Хүснэгт үүсгэхдээ баганы нэр, өгөгдлийн төрлийг заана:

sql
CREATE TABLE users (
    id       SERIAL PRIMARY KEY,
    нэр      TEXT NOT NULL,
    имэйл    TEXT UNIQUE NOT NULL,
    нас      INTEGER,
    үүсгэсэн TIMESTAMP DEFAULT NOW()
);

Энд:

  • SERIAL — автоматаар 1, 2, 3... дугаарлагдах тоо
  • PRIMARY KEY — хүснэгтийн давтагдашгүй танигч
  • NOT NULL — хоосон байж болохгүй гэсэн утга
  • UNIQUE — хүснэгтэд давтагдаж болохгүй
  • DEFAULT NOW() — оруулах үед одоогийн цагийг автоматаар тавина

Хүснэгтийн бүтцийг харах

код
blog_db=# \d users
                            Table "public.users"
  Column  |            Type             | Nullable |      Default
----------+-----------------------------+----------+-------------------
 id       | integer                     | not null | nextval('users_id_seq')
 нэр      | text                        | not null |
 имэйл    | text                        | not null |
 нас      | integer                     |          |
 үүсгэсэн | timestamp without time zone |          | now()
Indexes:
    "users_pkey" PRIMARY KEY, btree (id)
    "users_имэйл_key" UNIQUE CONSTRAINT, btree (имэйл)

Хүснэгт өөрчлөх — ALTER TABLE

Хүснэгтэд шинэ багана нэмэх:

sql
ALTER TABLE users ADD COLUMN утас TEXT;

Баганын нэр өөрчлөх:

sql
ALTER TABLE users RENAME COLUMN нас TO age;

Баганыг устгах:

sql
ALTER TABLE users DROP COLUMN утас;

Хүснэгт устгах — DROP TABLE

sql
DROP TABLE users;

Хэрэв хүснэгт байхгүй бол алдаа гарахгүй байхыг хүсвэл:

sql
DROP TABLE IF EXISTS users;

Жишээ: blog_db үүсгэх

Дараах хоёр хүснэгттэй жижиг блог өгөгдлийн санг үүсгэе:

sql
-- Зохиогчдын хүснэгт
CREATE TABLE authors (
    id       SERIAL PRIMARY KEY,
    нэр      TEXT NOT NULL,
    имэйл    TEXT UNIQUE NOT NULL
);

-- Нийтлэлийн хүснэгт
CREATE TABLE posts (
    id          SERIAL PRIMARY KEY,
    гарчиг      TEXT NOT NULL,
    агуулга     TEXT,
    author_id   INTEGER REFERENCES authors(id),
    нийтлэгдсэн TIMESTAMP DEFAULT NOW()
);

REFERENCES authors(id) гэдэг нь posts хүснэгтийн author_id нь authors хүснэгтийн id-тэй холбоотой гэсэн утга — үүнийг foreign key гэж нэрлэнэ. Дараа хичээлд дэлгэрэнгүй үзнэ.

Дараагийн хичээлд:

PostgreSQL-ийн бүх өгөгдлийн төрлүүдийг судалж — тоо, текст, огноо, boolean болон JSON-ийг хэрхэн зохистой сонгохыг сурна.