Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chuẩn hóa trong MYSQL

Tôi cố gắng giải thích sự bình thường hóa theo thuật ngữ giáo dân ở đây. Trước hết, nó là thứ áp dụng cho cơ sở dữ liệu quan hệ (Oracle, Access, MySQL) nên nó không chỉ dành cho MySQL.

Chuẩn hóa là đảm bảo mỗi bảng có các trường tối thiểu duy nhất và loại bỏ các trường phụ thuộc. Hãy tưởng tượng bạn có một hồ sơ nhân viên, và mỗi nhân viên thuộc một bộ phận. Nếu bạn lưu trữ phòng ban dưới dạng một trường cùng với dữ liệu khác của nhân viên, bạn sẽ gặp vấn đề - điều gì sẽ xảy ra nếu một phòng ban bị xóa? Bạn phải cập nhật tất cả các trường của bộ phận, và có khả năng xảy ra sai sót. Và điều gì sẽ xảy ra nếu một số nhân viên không có phòng ban (có lẽ là mới được giao?). Bây giờ sẽ có giá trị null.

Vì vậy, nói ngắn gọn, việc chuẩn hóa là để tránh có các trường là giá trị rỗng và đảm bảo rằng tất cả các trường trong bảng chỉ thuộc về một miền dữ liệu được mô tả. Ví dụ, trong bảng nhân viên, các trường có thể là id, tên, số an sinh xã hội, nhưng ba trường đó không liên quan gì đến bộ phận. Chỉ id nhân viên mới mô tả nhân viên đó thuộc bộ phận nào. Vì vậy, điều này ngụ ý rằng một nhân viên đang ở bộ phận nào nên ở trong một bảng khác.

Đây là một quy trình chuẩn hóa đơn giản.

EMPLOYEE ( < employee_id >, name, social_security, department_name)

Điều này không được chuẩn hóa, như đã giải thích. Biểu mẫu chuẩn hóa có thể trông giống như

EMPLOYEE ( < employee_id >, name, social_security)

Ở đây, bảng Nhân viên chỉ chịu trách nhiệm cho một tập dữ liệu. Vậy chúng ta lưu trữ nhân viên đó thuộc bộ phận nào? Trong một bảng khác

EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )

Điều này không phải là tối ưu. Nếu tên bộ phận thay đổi thì sao? (nó xảy ra trong chính phủ Hoa Kỳ mọi lúc). Do đó, tốt hơn là làm điều này

EMPLOYEE_DEPARTMENT ( < employee_id >, department_id )
DEPARTMENT ( < department_id >, department_name )

Có dạng bình thường đầu tiên, dạng bình thường thứ hai và dạng bình thường thứ ba. Nhưng trừ khi bạn đang học một khóa DB, tôi thường chỉ chọn dạng chuẩn hóa nhất mà tôi có thể hiểu được.

Hy vọng điều này sẽ hữu ích.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thêm dữ liệu vào cơ sở dữ liệu Cloud Firestore

  2. Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost' với PHPMyAdmin

  3. Hiệu suất MySQL:MyISAM so với InnoDB

  4. Làm cách nào để viết lại thành công mã mysql-php cũ bằng các hàm mysql_ * không dùng nữa?

  5. SQL Server tương đương ELT () trong MySQL là gì?