Data Type Overview (SQL Server & PostgreSQL)

Data Type Overview (SQL Server & PostgreSQL)

หลังจากที่อยู่หน้าบ้าน ทำ Visualize และออกแบบ Solution การแสดงผลให้ตรงตาม Requirement ของ User หน้าบ้านสำคัญมากเพราะใกล้ User ที่สุด แต่… หลังบ้านก็ยิ่งสำคัญ …

บ้านที่แข็งแรง มาจากการวางโครงสร้างพื้นฐาน และเสาเข็มที่เเข็งแรง

จึงเป็นจุดสำคัญที่ทำให้พลอยสนใจและอยากลงลึกหลังบ้านมากขึ้น ในมุมของ Data Engineer

เนื้อหาส่วนนี้มาจาก Database Fundation: Data Structure จาก Linkin Lerning โดย Adam Wilbert

ขอสรุปกันลืมไว้ดังนี้ ค่า …

มาเริ่มบทแรกด้วย Data Type

  1. Numeric data types
  2. Decimal (Precision, Scale)
  3. Character String
  4. Date and Time Data Types
  5. Specialty Data Type
  6. มาทำ Challenge กันเถอะ!
  7. Code Challenge 2: Store data in a table

Numeric data types

เป็นตัวเลขจำนวนเต็มเท่านั้น

Decimal (Precision, Scale)

ตัวเลขที่เป็นทศนิยม เพื่อความแม่นยำ ต้องกำหนดค่าใน วงเล็บ โดย

Precision = จำนวนตัวเลขทั้งหมด

Scales = ตัวเลขทั้งหมดหลังจุดทศนิยม

การกำหนดขนาดพื้นที่จัดเก็บข้อมูล จะใหญ่ขึ้นตาม Precision

และชื่อของ Data type จะแตกต่างออกไปของแต่ละ Platfrom

Character String

การจัดเก็บข้อมูลที่เป็นอักขระ / ตัวอักษร การจัดเก็บข้อมูลประเภทนี้ มีด้วยกัน 2 แบบ

  1. Fixed-length strings
  2. Variable-length string

ตัวอย่าง

Char ความยามต้องคงที่ จึงเติม อักขระพิเศษ เข้าไปด้วย แต่ varchar ไม่เติม จะเป็นตัวอักษรอย่างเดียว

การพิจารณา Character Data Type Considerations

  1. ส่วนมากที่เป็น Text Column มักใช้ verchar
  2. char จะใช้เมื่อต้องการให้ Value ยาวเท่ากันเสมอ
  3. ถ้าเป็น RDBMS platfrom เหมือนกัน จะเห็นว่าข้อดีของ Chat มากกว่า verchar แต่อย่างอื่นไม่ใช่ ดังนั้น หากมีลักษณะเป็นตัวแปรให้ใช้ varchar ถ้าไม่ใช่ ใช้ char

การพิจารณาค่าของ (n)

  1. ระบุจำนวนตัวอักษรที่ต้องการเก็บ
  2. ทั้ง char และ varchar ไม่อนุญาตให้ใส่เกินความยาวของ (n) ถ้าใส่เกิน ฐานข้อมูลจะส่งกลับข้อผิดพลาดและจะไม่บันทึกข้อมูลลงตาราง
  3. วิเคราะห์ข้อมูล Requtrement เพื่อพิจรณาค่าที่เหมาะสมที่สุดของ (n)

**ถ้ามีหลายภาษา ต้องใช้ Unicode Support สำหรับ SQL Server แต่ Postgres นั้น Support อยู่เเล้ว ใน char และ varchar***

**และถ้าไม่ต้องการให้ตัวเลข ไปใช้ในการคำนวณ ควรเก็บไว้ในรูปแบบ text เช่น รหัสไปรษณีย์ หรือเลขโทรศัพท์**

Date and Time Data Types

ตัวอย่าง Code บน SQL Server

-- Store dates and times in SQL Server
CREATE TABLE TimeExperiment (
    a datetimeoffset,
    b datetimeoffset(0)
);

INSERT INTO TimeExperiment
    VALUES
        (getdate(), getdate())
;

SELECT * FROM TimeExperiment;

-- Dates and time values can be entered in a variety of ways
INSERT INTO TimeExperiment (a)
    VALUES
        ('2020-01-02'), -- Standard date format
        ('Jan 2, 2020'), -- Can also use text abbreviations
        ('2 January, 2020 14:25'), -- Combine date and time
        ('2 Jan, 2020 2:25 PM') -- Specify PM when entering afternoon times in 12 hour format
;

DROP TABLE TimeExperiment;

ตัวอย่าง Code บน PostgreSQL

-- Store dates and times in PostgreSQL
CREATE TABLE TimeExperiment (
    a timestamp with time zone,
    b timestamp (0) with time zone
);

INSERT INTO TimeExperiment
    VALUES
        (now(), now())
;

SELECT * FROM TimeExperiment;

-- Dates and time values can be entered in a variety of ways
INSERT INTO TimeExperiment (a)
    VALUES
        ('2020-01-02'), -- Standard date format
        ('Jan 2, 2020'), -- Can also use text abbreviations
        ('2 January, 2020 14:25'), -- Combine date and time
        ('2 Jan, 2020 2:25 PM') -- Specify PM when entering afternoon times in 12 hour format
;

DROP TABLE TimeExperiment;

Specialty Data Type

มาทำ Challenge กันเถอะ!

--- For PostgreSQL 
CREATE TABLE employees (
    first_name      CHARACTER VARYING (50),
    last_name       CHARACTER VARYING (100),
    phone_number    CHARACTER(8),
    office_number   CHARACTER (3),
    hire_date       DATE,
    annual_salary   NUMERIC (10,2) 
);

INSERT INTO employees
VALUES ('Adam', 'Wilbert','55-0123','201','2020-10-15',45000.00);

SELECT*FROM employees;
--- for SQL Server 
CREATE TABLE Employees (
    FirstName      VARCHAR (50),
    LastName       VARCHAR (100),
    PhoneNumber    CHAR(8),
    OfficeNumber   CHAR (3),
    HireDate       DATE,
    AnnualSalary   DECIMAL (10,2) 
);

INSERT INTO Employees
VALUES ('Adam', 'Wilbert','55-0123','201','2020-10-15',45000.00);

SELECT*FROM Employees;

Code Challenge 2: Store data in a table

-- SQL request(s)‌‌‌‌‌‌‌‌‌‌‌‌‌‌ below
-- Create your table here
CREATE TABLE EventSchedule (
    EventID         INTEGER PRIMARY KEY,         ---- 
    EventName       VARCHAR (100),
    VenueName       VARCHAR (100),
    MaxAttendees    SMALLINT,      
    TicketPrice     DECIMAL(6,2),
    EventDate       DATE,
    EventTime       TIME
);

------------------------------
-- Do not edit below this line
-- Include this insert and select statement in your final solution to test the table you've created above.

INSERT INTO EventSchedule (EventID, EventName, VenueName, MaxAttendees, TicketPrice, EventDate, EventTime)
VALUES
(1, 'The Midnight Echo', 'Luna Lounge', 150, 25.00, '2024-10-15', '20:00'),
(2, 'Neon Horizon', 'The Electric Owl', 200, 30.00, '2024-11-05', '21:00'),
(3, 'Echoes of the City', 'Sunset Plaza', 100, 20.00, '2024-12-01', '19:30'),
(4, 'The Velvet Nights', 'Moonlight Tavern', 180, 35.00, '2024-10-28', '20:30'),
(5, 'Solar Flare', 'Starlight Arena', 250, 40.00, '2024-11-20', '22:00');

SELECT * FROM EventSchedule

*** Note: tinyint ใน ANSI SQL จะเก็บตัวเลขระหว่าง -128 ถึง +127 ***

จริงๆ มาถึงตรงนี้ ยังมีความสับสน Data Type บาง Type อยู่เลย 🤣

แต่ใด ใด ทำให้รู้มากขึ้นด้วยว่าการ Storage หลังบ้าน ถ้าเราทำเผื่อมากไป ที่จัดเก็บก็จะใหญ่และช้ามาก แต่ถ้าทำเล็กไป ก็จะเก็บไม่ได้ ดังนั้นการเลือก Data Type ที่เหมาะสมจึงสำคัญมากๆ เลย 🕵🏻‍♂️

แล้วพบกับใหม่ในบทความหน้านะคะ .. 👩🏼‍💻

ใส่ความเห็น