דילוג לתוכן המרכזי
מודול 9 · שיעור 1 מתוך 433/57 בקורס~10 min
שיעורי מודול (1/4)

סוגי נתונים מתקדמים ומספרי ENUM

בשיעור הקודם ראינו את הפקודה הבסיסית CREATE TABLE. כעת נסקור כמה סוגי נתונים מתקדמים ש-PostgreSQL מציעה כדי לדגמן את הדומיינים שלנו בצורה מדויקת ובטוחה יותר.

סוגי מספרים וטקסטים

ל-PostgreSQL יש כמה סוגים למספרים ולטקסט. בחירה נכונה מסייעת הן באימות והן בשטח האחסון.

SQL
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.

SQL
CREATE TABLE public_orders (
  id          UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  customer    TEXT NOT NULL,
  total       NUMERIC(10, 2)
);

ENUM (ספירות)

לעתים קרובות עמודה חייבת להכיל רק אחד מתוך כמה ערכים מוגדרים מראש (למשל, סטטוס הזמנה: "חדש", "תשלום", "נשלח"). גישה אחת היא להשתמש במילת המפתח CHECK, אבל PostgreSQL מציע סוגי ENUM מותאמים אישית.

SQL
-- 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'
);

זה מבטיח שאף אחד לעולם לא יוכל להוסיף סטטוס לא חוקי, ומגן על עקביות הנתונים.

נסה את זה

פעילות גופנית#sql.m9.l1.e1
ניסיונות: 0טוען...

צור טבלת 'משתמש_ביקורות' עם: id (SERIAL pk), test_id (UUID עם ברירת המחדל gen_random_uuid()), ניקוד (מספר שלם לא ריק) ותוכן (TEXT). אף אחד מהשדות האחרים לא צריך אילוצים מפורשים מעבר לסוג.

טוען עורך...
הצג רמז

כתוב CREATE TABLE user_reviews (...) ולאחר מכן את השדות השונים. זכור את הפסקים.

הפתרון זמין לאחר 3 ניסיונות

סקירת התרגיל

פעילות גופנית#sql.m9.l1.e2
ניסיונות: 0טוען...

תחילה צור את סוג ENUM 'user_role' עם הערכים 'admin' ו-'user'. לאחר מכן צור את הטבלה 'enum_users' עם id (SERIAL pk) ותפקיד (הסוג שיצרת זה עתה, NOT NULL).

טוען עורך...
הצג רמז

אל תשכח את ; להפריד בין שתי ההצהרות (ה-CREATE TYPE וה-CREATE TABLE).

הפתרון זמין לאחר 3 ניסיונות