Đảm bảo tính đặc trưng của data bằng cách giới hạn Unique trong database (MySQL)

Tram Ho

Tác giả: Tamesuu
Nguồn: https://qiita.com/tamesuu/items/d9475a35709ec0d49763

Khi nào thì bạn sẽ giới hạn Unique cho MySQL ?
“Khi cần thiết chứ khi nào”, bạn có thể sẽ nói thế.
Vậy khi nào là cần thiết?

Trong bài viết này, tác giả Tamesuu sẽ nói về những case cần giới hạn Unique

Giới hạn Unique là gì?

Là việc đảm bảo rằng dữ liệu của 1 column trong 1 table nào đó là duy nhất

URL ref: https://dev.mysql.com/doc/refman/5.6/ja/constraint-primary-key.html

Khi nghĩ về trường hợp Web application
Khi bạn muốn đảm bảo tính đặc trưng của data trong Web application (Rails)

Ở phía web application (server), kiểm tra trước khi save data.
Tôi sẽ thiết lập giới hạn Unique ở phía My SQL

Vậy thì câu trả lời cho câu hỏi “Khi nào thì cần thiết lập giới hạn Unique trong MySQL?” ở đầu bài sẽ là

  1. Khi test trước khi save data bên phía Web app (phía server )

  2. Gắn giới hạn Unique cho MySQL

Hãy thử xem qua các case cần gắn nào:

Môi trường test

Test
Chuẩn bị:

MySQL

Bên phía Web application (Server)、 cả uniq_test1 lẫn uniq_test2 đều test trước khi save data

Lần này, sẽ tạo model trong rails console

QUy trình xử lý thì đại khái như sau

  1. Bắt đầu transaction của MySQL
  2. Kiểm tra tính đặc trưng của data
  3. Kết thúc transaction của MySQL (Tại đây sẽ tạo data )

Vấn đề là : xử lý được tiến hành gần như cùng lúc

Nếu không giới hạn unique cho MySQL (Bad pattern)

Console1

Console2

Phía Web app (Server) sẽ để lọt dữ liệu!!!

Gắn giới hạn Unique key cho MySQL (Good pattern)
Console1

Console2

Phía web app (server) có để ọt đi nữa, khi save xuống MySQL thì phía MySQL sẽ phát hiện và đưa ra error

Chốt:
Để đảm bảo tính đặc trưng của data, cần gắn Unique key cho MySQL. Tác dụng thứ hai là đối phó được cho trường hợp bên web app (server) bị thiếu sót.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo