PostgresQL

Dữ Liệu (Data)

  • Lưu thông tin về các đối tượng thực tế 
  • Thường sẽ gắn với một n
  • Bullet Three

In memory

  • dữ liệu cứng, đơn giản
  • dữ liệu đơn giản: chuỗi, số, mảng,...
  • Vấn đề: thiếu hệ thống, tốn bộ nhớ, dữ liệu không đc cập nhật nhất quán -> TEMPORARY

Database

  • hỗ trợ nhiều kiểu dữ liệu
  • tính năng: create, insert, update, join, select,...
  • Persistent & durable: dữ liệu đc tạo ra ở bên ngoài ứng dụng tồn tại lâu bền và đc lưu lại 

Tất cả CSDL

  • persistent storage: lưu trữ lâu bền
  • safe access by multiple users: cho phép nhiều users/ programs truy xuất 

Chỉ CSDL quan hệ

  • query language: truy xuất dữ liệu đa năng với các tính năng như join, aggregations
  • constraints: áp dụng các giới hạn để bảo vệ tính thống nhất toàn vẹn của dữ liệu

Tính chất của CSDL

NoSQL

(e.g. MongoDB, couchDB)

  • Lưu số lượng lớn dữ liệu ít liên quan đến nhau
  • Không yêu cầu cấu trúc chặt chẽ
  • Muốn tối ưu sử dụng cloud storage
  • Cần dựng CSDL nhanh, dữ liệu, cấu trúc thay đổi nhanh chóng

SQL DB

(e.g. Postgres, mySQL)

  • đảm bảo ACID  (Atomicity, Consistency, Isolation, Durability)
  • dữ liệu liên quan đến nhau, có cấu trúc
  • cấu trúc dữ liệu không thay đổi thường xuyên 

Normalized Design

 

  1. Mỗi hàng phải có cùng số cột
  2. Có primary key, phân biệt các hàng/ bản ghi với nhau và giá trị trong mỗi cột phải miêu tả/ bổ sung thông tin cho primary key đấy. Ví dụ: student_id, course_id
  3.  Những thông tin không liên quan đến primary key thuộc về bảng khác. Nếu 1 cột bổ trợ thông tin cho 1 cột không phải là primary key thì không nằm trong bảng đấy.

 

product count store address
samsung S8 15 fpt store 1 số 1 hàng gai
samsung note 8 20 viettel store 1 số 9 bà triệu

Ví dụ: cột address bổ trợ cho store chứ không phải primary key là product

Tách thành 2 bảng

product count store
 s8 15 fpt store 1
note 8 20 viettel store 1
store address
fpt store 1 số 1 hàng gai
viettel store 1 số 9 bà triệu

4. Không miêu tả những quan hệ không tồn tại

Employee Technology skill Language skill
Anna Nodejs English
Anna Linux French
David Vuejs French

Bảng job_skill: Anna biết Nodejs và English nhưng technology & language không có mối quan hệ đặc thù nào hết

Tách thành 2 bảng tech_skill & language_skill

Employee Skill
Anna Nodejs
Anna Linux
David Vuejs
Employee Skill
Anna English
Anna French
David French

Join

 

Đếm số lượng mỗi sản phẩm đc bán ?

 

select products.sku, count(*) as num, 
  sum(sales.count) as sales_num
  from products join sales
    on products.sku = sales.sku
  group by products.sku;
select products.name, products.sku, 
  count(sales.sku) as num,
  sum(sales.count) as sales_num
  from products left join sales
    on products.sku = sales.sku
  group by products.sku;

Sử dụng left join và count(sales.sku)

Lỗi dễ mắc

sku num sales_num
222 2 8
343 1 1
sku num sales_num
222 2 8
343 1 1
101 0 0
1025 0 0

PostgresQL

By Linh Ngo

PostgresQL

  • 119