Contents
Mysql là hệ quản trị dữ liệu miễn phí, được tích hợp sử dụng chung với apache, PHP. Chính yếu tố phát triển trong cộng đồng mã nguồn mở nên mysql đã qua rất nhiều sự hỗ trợ của những lập trình viên yêu thích mã nguồn mở.
Cơ sở dữ liệu Mysql là gì ?
Mysql là hệ quản trị dữ liệu miễn phí, được tích hợp sử dụng chung với apache, PHP. Chính yếu tố phát triển trong cộng đồng mã nguồn mở nên mysql đã qua rất nhiều sự hỗ trợ của những lập trình viên yêu thích mã nguồn mở. Mysql cũng có cùng một cách truy xuất và mã lệnh tương tự với ngôn ngữ SQL. Nhưng Mysql không bao quát toàn bộ những câu truy vấn cao cấp như SQL. Về bản chất Mysql chỉ đáp ứng việc truy xuất đơn giản trong quá trình vận hành của website nhưng hầu hết có thể giải quyết các bài toán trong PHP.
Khái niệm cơ sở dữ liệu, bảng, thuộc tính, kiểu và quy chuẩn đặt tên trong hệ cơ sở dữ liệu MySQL
-
Cơ sở dữ liệu (Databases)
Một hệ quản trị cơ sở dữ liệu bao gồm nhiều cơ sở dữ liệu, mỗi cơ sở dữ liệu gồm nhiều bảng, mỗi bảng gồm nhiều bản ghi, mỗi bản ghi gồm nhiều thuộc tính khác nhau.
Vì vậy theo định nghĩa của riêng mình thì cơ sở dữ liệu là một nơi để chứa dữ liệu.
Mỗi dự án lớn hay nhỏ đều có một hoặc nhiều cơ sở dữ liệu liên kết với nhau.
Mỗi cơ sở dữ liệu lại gồm nhiều bảng liên kết với nhau thông qua các ràng buộc như khoá ngoại và khoá chính của mỗi bảng.Đặt tên cơ sở dữ liệu: Đặt tên không chứa các kí tự đặc biệt
Ví dụ: Trong databases: Students có các bảng như sau
+ tbl_class: Bảng để lưu trữ lớp học của học sinh có khoá chính là ClassID.
+ tbl_student: Bảng để lưu trữ danh sách học sinh có khoá chính là StudentID và khoá ngoại là ClassID.
+ tbl_teacher: Bảng để lưu trữ danh sách giáo viên trong lớp học có khoá chính là TeacherID và khoá ngoại là ClassID.
+ tbl_score: Bảng để lưu trữ điểm của học sinh có khoá chính là ScoreID và khoá ngoại là StudentID và ClassID. -
Bảng trong cơ sở dữ liệu (Tables)
Bảng là nơi chứa các bản ghi dữ liệu, nó là một thành phần quan trọng trong cơ sở dữ liệu. Mỗi bảng gồm rất nhiều bản ghi.
Ví dụ: Bảng học sinh (table name: tbl_student)
Field Type Length StudentID int StudentName nvachar (100) 100 ClassID int PhoneNumber varchar(12) 12 Như bạn thấy ở bảng trên mình đã định nghĩa bảng tbl_student gồm có 4 trường như sau:
+ StudentID: Là kiểu số tự nhiên (int) và là khoá chính của bảng tbl_student.
+ StudentName: Là tên của học sinh, có kiểu nvachar (100) là kiểu kí tự có dấu có độ dài là 100 kí tự.
+ ClassID: Là kiểu số tự nhiên (int) và là khoá ngoại của bảng tbl_student.
+ PhoneNumber: Là số điện thoại của học sinh, có kiểu nvachar (12) là kiểu kí tự có dấu có độ dài là 12 kí tự. -
Thuộc tính của bảng cơ sở dữ liệu (Field)
Thuộc tính trong bảng của cơ sở dữ liệu là các trường dữ liệu cần lưu cho một đối tượng cụ thể trong bảng đó.
Ví dụ: Trong bảng tbl_student có các trường dữ liệu như StudentID, StudentName, ClassID, PhoneNumber -
Kiểu của các thuộc tính trong cơ sở dữ liệu (type)
Kiểu dữ liệu trong các bảng của cơ sở dữ liệu dùng để định nghĩa ràng buộc về sự toàn vẹn dữ liệu, tránh bị lỗi khi người lên dữ liệu bị lỗi.
Các kiểu dữ liệu trong hệ quản trị MYSQL như sau:
Việc định nghĩa một cách hợp lý các trường trong một bảng là quan trọng để tối ưu hóa toàn bộ cơ sở dữ liệu của bạn. Bạn chỉ nên sử dụng kiểu và kích cỡ của trường mà bạn thực sự muốn sử dụng; đừng định nghĩa một trường với độ rộng là 10 ký tự nếu bạn chỉ sử dụng 2 ký tự. Các kiểu của trường (hoặc cột) cũng được biết đến như là các kiểu dữ liệu, tức là kiểu dữ liệu bạn sẽ lưu trữ trong các trường đó.
MySQL sử dụng nhiều kiểu dữ liệu, được chia thành 3 loại: kiểu số, kiểu date và time, và kiểu chuỗi.
MySQL sử dụng tất cả các kiểu dữ liệu số theo chuẩn ANSI SQL, vì thế nếu bạn đã làm quen với một hệ thống cơ sở dữ liệu khác, thì bạn sẽ thấy những định nghĩa này là khá thân thuộc với bạn khi học về MySQL.
Dưới đây liệt kê các kiểu dữ liệu số phổ biến và miêu tả của chúng:INT – Một số nguyên với kích cỡ thông thường, có thể là signed hoặc unsigned. Nếu có dấu, thì dãy giá trị có thể là từ -2147483648 tới 2147483647, nếu không dấu thì dãy giá trị là từ 0 tới 4294967295. Bạn có thể xác định một độ rộng lên tới 11 chữ số.TINYINT – Một số nguyên với kích cỡ rất nhỏ, có thể là signed hoặc unsigned. Nếu có dấu, thì dãy giá trị có thể là từ -128 tới 127, nếu không dấu thì dãy giá trị là từ 0 tới 255. Bạn có thể xác định một độ rộng lên tới 4 chữ số.
SMALLINT – Một số nguyên với kích cỡ nhỏ, có thể là signed hoặc unsigned. Nếu có dấu, thì dãy giá trị có thể là từ -32768 tới 32767, nếu không dấu thì dãy giá trị là từ 0 tới 65535. Bạn có thể xác định một độ rộng lên tới 5 chữ số.
MEDIUMINT – Một số nguyên với kích cỡ trung bình, có thể là signed hoặc unsigned. Nếu có dấu, thì dãy giá trị có thể là từ -8388608 tới 8388607, nếu không dấu thì dãy giá trị là từ 0 tới 16777215. Bạn có thể xác định một độ rộng lên tới 9 chữ số.
BIGINT – Một số nguyên với kích cỡ lớn, có thể là signed hoặc unsigned. Nếu có dấu, thì dãy giá trị có thể là từ -9223372036854775808 tới 9223372036854775807, nếu không dấu thì dãy giá trị là từ 0 tới 18446744073709551615. Bạn có thể xác định một độ rộng lên tới 20 chữ số.
FLOAT(M,D) – Một số thực dấu chấm động không dấu. Bạn có thể định nghĩa độ dài hiển thị (M) và số vị trí sau dấy phảy (D). Điều này là không bắt buộc và sẽ có mặc định là 10,2: với 2 là số vị trí sau dấu phảy và 10 là số chữ số (bao gồm các phần thập phân). Phần thập phân có thể lên tới 24 vị trí sau dấu phảy đối với một số FLOAT.
DOUBLE(M,D) – Một số thực dấu chấm động không dấu. Bạn có thể định nghĩa độ dài hiển thị (M) và số vị trí sau dấy phảy (D). Điều này là không bắt buộc và sẽ có mặc định là 16,4: với 4 là số vị trí sau dấu phảy và 16 là số chữ số (bao gồm các phần thập phân). Phần thập phân có thể lên tới 53 vị trí sau dấu phảy đối với một số DOUBLE. REAL là đồng nghĩa với DOUBLE.
DECIMAL(M,D) – Một kiểu khác của dấu chấm động không dấu. Mỗi chữ số thập phân chiếm 1 byte. Việc định nghĩa độ dài hiển thị (M) và số vị trí sau dấy phảy (D) là bắt buộc. NUMERIC là một từ đồng nghĩa cho DECIMAL.
Kiểu dữ liệu Date và Time trong MySQLKiểu dữ liệu Date và Time được phân loại thành:DATE – Một date trong định dạng YYYY-MM-DD, giữa 1000-01-01 và 9999-12-31. Ví dụ, ngày 25 tháng 12 năm 2015 sẽ được lưu ở dạng 2015-12-25.
DATETIME – Một tổ hợp Date và Time trong định dạng YYYY-MM-DD HH:MM:SS, giữa 1000-01-01 00:00:00 và 9999-12-31 23:59:59. Ví dụ, 3:30 chiều ngày 25 tháng 12, năm 2015 sẽ được lưu ở dạng 2015-12-25 15:30:00.
TIMESTAMP – Một Timestamp từ giữa nửa đêm ngày 1/1/1970 và 2037. Trông khá giống với định dạng DATETIME trước, khác biệt ở chỗ không có dấu gạch nối giữa các số. Ví dụ, 3:30 chiều ngày 25 tháng 12, năm 2015 sẽ được lưu dưới dạng 20151225153000 ( YYYYMMDDHHMMSS ).
TIME – Lưu time trong định dạng HH:MM:SS.
YEAR(M) – Lưu 1 năm trong định dạng 2 chữ số hoặc 4 chữ số. Nếu độ dài được xác định là 2 (ví dụ: YEAR(2)), YEAR có thể từ 1970 tới 2069 (70 tới 69). Nếu độ dài được xác định là 4, YEAR có thể từ 1901 tới 2155. Độ dài mặc định là 4.
Kiểu dữ liệu chuỗi trong MySQL
Ngoài các kiểu dữ liệu số hoặc kiểu dữ liệu date và time, thì còn một kiểu dữ liệu mà bạn thường sử dụng nhất trong MySQL là kiểu dữ liệu chuỗi. Dưới đây liệt kê các kiểu dữ liệu chuỗi và phần miêu tả của chúng trong MySQL:CHAR(M) – Một chuỗi có độ dài cố định có độ dài từ 1 tới 255 ký tự (ví dụ CHAR(5)). Nếu giá trị thật của một trường kiểu Char không bằng với độ dài khai báo thì phần thiếu bên phải của nó sẽ được thêm bằng các kí tự trắng một cách tự động. Định nghĩa độ dài là không bắt buộc, giá trị mặc định là 1.VARCHAR(M) – Dữ liệu kiểu chuỗi có độ dài thay đổi, có độ dài từ 1 đến 255 kí tự (ví dụ Varchar(24)). Bạn phải định nghĩa độ dài khi tạo một trường VARCHAR.BLOB hoặc TEXT – Trường kiểu này có độ dài tối đa 65535 kí tự. BLOBs là viết tắt của “Binary Large Objects”, và được sử dụng để lưu trữ một lượng lớn dữ liệu nhị phân như các bức ảnh hoặc các loại tập tin khác. Với TEXT, trường cũng lưu trữ được một lượng lớn dữ liệu. Điểm khác nhau giữa chúng là: khi sắp xếp và so sánh dữ liệu đã lưu trữ thì với BLOBs là phân biệt kiểu chữ, còn với TEXT là không phân biệt kiểu chữ. Bạn không phải xác định độ dài với BLOBs hoặc TEXT.
TINYBLOB hoặc TINYTEXT – Một cột BLOB hoặc TEXT với độ dài tối đa là 255 ký tự. Bạn không cần xác định độ dài với TINYBLOB hoặc TINYTEXT.
MEDIUMBLOB hoặc MEDIUMTEXT – Một cột BLOB hoặc TEXT với độ dài tối đa là 16777215 ký tự. Bạn không cần xác định độ dài với MEDIUMBLOB hoặc MEDIUMTEXT.
LONGBLOB hoặc LONGTEXT – Một cột BLOB hoặc TEXT với độ dài tối đa là 4294967295 ký tự. Bạn không cần xác định độ dài với LONGBLOB hoặc LONGTEXT.
ENUM – Khi định nghĩa một trường kiểu này, tức là, ta đã chỉ ra một danh sách các đối tượng mà trường phải nhận (có thể là Null). Ví dụ, nếu ta muốn một trường nào đó chỉ nhận một trong các giá trị “A” hoặc “B” hoặc “C” thì ta phải định nghĩa kiểu ENUM cho nó như sau: ENUM (‘A’, ‘B’, ‘C’). Và chỉ có các giá trị này (hoặc NULL) có thể xuất hiện trong trường đó.
-
Quy chuẩn đặt tên trong cơ sở dữ liệu
Cái tên thường phản ánh nội dung và bản chất của đối tượng hoặc biến mà nó được dùng để đặt tên. Đặt tên sao cho nó có ý nghĩa đúng với nội dung đã khó mà đặt tên sao cho đúng với quy tắc chuẩn cũng là điều khó không kém. Đặt tên theo quy tắc chuẩn sẽ giúp những người khác khi xem code của bạn cũng cảm thấy dễ hiểu hơn vì nó một quy tắc đã được định sẵn. Nhưng việc đặt tên cho biến hoặc các đối tượng trong MYSQL cũng không phải là bắt buộc và bạn có thể tùy chọn việc này. Bài viết này mình xin giới thiệu cho các bạn một vài nguyên tắc đặt tên thông dụng trong MYSQL.
1. Sử dụng một kí tự alphabet ở đầu tên, không sử dụng các kí tự “_” gạch dưới, hoặc số ở đầu tên biến.
2. Giới hạn việc viết tắt quá nhiều trong tên biến hoặc đối tượng. Điều này dễ gây nhầm lẫn.
3. Giới hạn việc sử dụng các từ viết tắt hai lần trong tên.
4. Đặt tên mang ý nghĩa đúng với nội dung và tính chất của biến hoặc đối tượng.
5. Không sử dụng khoảng trắng(space) hoặc các kí tự đặc biệt trong tên như *,$,#…
6. Tên bảng thường không cần bắt đầu bằng prefix “tbl” hay “tb” và tên bảng nên để ở dạng số ít như “Student” thay vì “Students“. Tên bảng nên sử dụng Pascal Case tức là viết hoa chữ cái đầu của mỗi từ trong tên như SaleDepartment.
7. Nguyên tắc đặt tên cột.
– Nên đặt tên cột theo kiểu Pascal, hạn chế dùng theo kiểu camelCase( kiểu lạc đà – tức là chữ đầu không viết hoa mà viết thường còn các chữ sau có thể viết hoa chữ cái đầu của mỗi từ như myDocument).
– Đặt tên khóa chính nên có hậu tố Id thường thì công thức sẽ là tên bảng + “Id”.
– Đối với khóa ngoại thì nên có tên giống với khóa chính mà nó tham chiếu tới. Ví dụ khóa chính của bảng Staff là “StaffId” và bảng [Class] có khóa ngoại đến bảng Staff thì nó có tên là “StaffId”.
– Không nên sử dụng các tiến tố trước tên cột.
– Tên nên chỉ ra loại dữ liệu mà nó chứa ví dụ bạn có 1 trường dữ liệu lưu việc sinh viên có đi học vào ngày nào đó hay không thì thay vì đặt tên biến là Absent bạn có thể đặt là IsAbsent với kiểu dữ liệu là bit.
– Tên cột phải có ý nghĩa và không nên viết tắt quá nhiều nhưng bạn phải lưu ý đến độ dài của tên cột nên nằm trong khoảng dưới 30 chars là tốt nhất nhưng giới hạn của nó là 50 chars.
– Tên cột có thể chứa số nhưng không chứa các kí tự đặc biệt.
8. Đặt tên cho index thì nên bắt đầu bằng “IX_”, đặt tên cho unique column thì nên bắt đầu là “UN_” hoặc “U/N”