שיעורי מודול (1/4)
סוגי נתונים מתקדמים ומספרי ENUM
בשיעור הקודם ראינו את הפקודה הבסיסית CREATE TABLE. כעת נסקור כמה סוגי נתונים מתקדמים ש-PostgreSQL מציעה כדי לדגמן את הדומיינים שלנו בצורה מדויקת ובטוחה יותר.
סוגי מספרים וטקסטים
ל-PostgreSQL יש כמה סוגים למספרים ולטקסט. בחירה נכונה מסייעת הן באימות והן בשטח האחסון.
CREATE TABLE advanced_products (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
description TEXT,
-- NUMERIC(p,s) dove p = cifre totali, s = cifre decimali
price NUMERIC(10, 2) NOT NULL,
featured BOOLEAN DEFAULT FALSE
);TEXTלעומתVARCHAR(n): ב-Postgres הביצועים זהים. אתה משתמש ב-VARCHAR(n)רק כאשר אתה רוצה להגביל במפורש את האורך המוכנס ברמת מסד הנתונים.NUMERIC(10, 2): מושלם לכסף או דיוק אריתמטי. כאן הוא מאפשר לכל היותר 8 ספרות שלמות ו-2 עשרוניות (10 בסך הכל). אם אתה מוסיף10.555, Postgres מעגל אותו ל-10.56.
סוג UUID
עבור מזהים מאובטחים שנחשפים באינטרנט (כגון מזהים ציבוריים בכתובות URL), UUID מועדף לעתים קרובות על פני התוספת הקלאסית SERIAL.
CREATE TABLE public_orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
customer TEXT NOT NULL,
total NUMERIC(10, 2)
);ENUM (ספירות)
לעתים קרובות עמודה חייבת להכיל רק אחד מתוך כמה ערכים מוגדרים מראש (למשל, סטטוס הזמנה: "חדש", "תשלום", "נשלח"). גישה אחת היא להשתמש במילת המפתח CHECK, אבל PostgreSQL מציע סוגי ENUM מותאמים אישית.
-- Dobbiamo prima creare il tipo:
CREATE TYPE order_status AS ENUM ('nuovo', 'pagato', 'spedito', 'cancellato');
-- Ora possiamo usarlo in una tabella:
CREATE TABLE orders_demo (
id SERIAL PRIMARY KEY,
status order_status NOT NULL DEFAULT 'nuovo'
);זה מבטיח שאף אחד לעולם לא יוכל להוסיף סטטוס לא חוקי, ומגן על עקביות הנתונים.
נסה את זה
צור טבלת 'משתמש_ביקורות' עם: id (SERIAL pk), test_id (UUID עם ברירת המחדל gen_random_uuid()), ניקוד (מספר שלם לא ריק) ותוכן (TEXT). אף אחד מהשדות האחרים לא צריך אילוצים מפורשים מעבר לסוג.
הצג רמז
כתוב CREATE TABLE user_reviews (...) ולאחר מכן את השדות השונים. זכור את הפסקים.
הפתרון זמין לאחר 3 ניסיונות
סקירת התרגיל
תחילה צור את סוג ENUM 'user_role' עם הערכים 'admin' ו-'user'. לאחר מכן צור את הטבלה 'enum_users' עם id (SERIAL pk) ותפקיד (הסוג שיצרת זה עתה, NOT NULL).
הצג רמז
אל תשכח את ; להפריד בין שתי ההצהרות (ה-CREATE TYPE וה-CREATE TABLE).
הפתרון זמין לאחר 3 ניסיונות