Lý thuyết Sequelize (Phần 1)

Tram Ho

Trước khi đọc bài viết thì mình muốn mọi người biết rằng đây chỉ là bài dịch ngẫu hứng trong thời gian rảnh. Nếu các bạn thấy đọc khó hiểu thì hãy vào bài viết gốc của docs trên trang sequelize ở đường link này. Phiên bản mình dịch là Sequelize V6
]

Lý thuyết Sequelize (phần I)

Lý thuyết cơ bản về model

I/ Khái niệm

Model chính là class đại diện cho bảng trong database. Để khai báo được bảng thì cần có những KIỂU DỮ LIỆU. Trong javascript thì không có những thứ đó nên Sequelize có hỗ trợ cho nhiều loại kiểu dữ liệu.

Sequelize hỗ trợ tạo sẵn bảng với dạng số nhiều của tên model. Ví dụ Model tên là User thì bảng trong database sẽ tên là Users.
Và nếu bảng là Person thì Sequelize cũng sẽ tự hiểu dạng số nhiều là People nhờ vào thư viện inflection

Tên Model và tên bảng đều có thể thay đổi được.

II/ Cách khai báo Model

Sau đây là code mẫu sử dụng cả 2 cách sequelize và thừa hưởng class

  1. Sử dụng sequelize.define:

  1. Sử dụng thừa hưởng class

III/ Cẩn thận code shadowing

Nếu như sử dụng phương pháp thứ 2 là thừa hưởng class thì không nên khai báo trùng thuộc tính trong class mà model thừa hưởng.

Ví dụ không nên: (class Model đã có thuộc tính id, class User khai báo thêm thuộc tính id sẽ bị viết đè lên và mất setter getter)

Ví dụ nên:

IV/ Thay đổi tên bảng

  1. Bắt buộc tên bảng y chang tên model:

Bằng cách sử dụng option freezeTableName: true

Ví dụ:

Hoặc khai báo lựa chọn này khi khai báo sequelize ở đầu file

  1. Cung cấp tên bảng trực tiếp

Cung cấp tên bảng khi khai báo model:

V/ Đồng bộ model

  1. Đồng bộ từng cái

Khi định nghĩa một model, tức là bạn đang nói cho Sequelize một vài điều về bảng của nó trong cơ sở dữ liệu. Tuy nhiên, nếu bảng thực sự không tồn tại ? Nếu nó tồn tại, nhưng nó có các cột khác nhau, ít cột hơn hoặc bất kỳ sự khác biệt nào?

Đây là lúc đồng bộ hóa model bước vào. Một model có thể được đồng bộ hóa với cơ sở dữ liệu bằng cách gọi model.sync(options), một hàm không đồng bộ (trả về một Promise ). Với lệnh gọi này, Sequelize sẽ tự động thực hiện truy vấn SQL tới cơ sở dữ liệu. Lưu ý rằng điều này chỉ thay đổi bảng trong cơ sở dữ liệu, không thay đổi model ở phía JavaScript.

  • User.sync() – Tạo bảng nếu nó không tồn tại (và không làm gì nếu nó đã tồn tại)
  • User.sync({ force: true }) – Tạo bảng, xóa bảng nếu bảng đã tồn tại rồi tạo bảng
  • User.sync({ alter: true }) – Kiểm tra trạng thái hiện tại của bảng trong cơ sở dữ liệu (cột nào tồn tại, kiểu dữ liệu của chúng, v.v.), sau đó thực hiện các thay đổi cần thiết trong bảng để khiến bảng phù hợp với model.

Ví dụ:

  1. Đồng bộ tất cả

Bằng cách sử dụng lệnh sequelize.sync() để tự động đồng bộ tất cả model.
Ví dụ:

VI/ Drop bảng

Để có thể drop bảng có liên hệ với lại một model ta chạy lệnh .drop():

hoặc drop toàn bộ bảng ta chạy:

Tuy nhiên drop bảng hoặc đồng bộ bằng phương pháp force, alter là KHÔNG KHUYẾN CÁO trong PRODUCTION.

VII/ Timestamps

Mặc định, sequelize sẽ thêm vào hai cột createAtupdateAt cho từng model với loại dữ liệu là DataTypes.DATE.

Chú ý: Những field này được cập nhật tự động bởi Sequelize. Do đó tất cả những cập nhật sử dụng Queries thường sẽ không kích hoạt tác dụng này. Mà phải cập nhật sử dụng hàm có sẵn của Sequelize.

Hành vi này có thể được tắt đi bởi lệnh:

Hoặc là ta cũng có thể enable thằng nào mà mình thích bằng lệnh:

VIII/ Cú pháp ngắn để định nghĩa cột

Nếu như chỉ muốn định nghĩa type của một cột thì ta có thể viết:

IX/ Giá trị mặc định của một cột

Mặc định sequelize sẽ coi giá trị mặc định là NULL nhưng ta có thể cấu hình giá trị mặc định:

X/ Các kiểu dữ liệu

Sequelize hỗ trợ nhiều kiểu dữ liệu xài chung lẫn độc quyền cho từng database. Các kiểu dữ liệu độc quyền xem tại đây.

Ngoài ra các kiểu dữ liệu xài chung:

String

Boolean

Numbers

Dates

UUIDs

XI/ Các options khác của cột

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo