Bình thường hóa cơ sở dữ liệu của bạn: Biểu mẫu thông thường đầu tiên

Hai quy tắc đơn giản này sẽ giúp bình thường hóa cơ sở dữ liệu của bạn

Biểu mẫu thông thường đầu tiên (1NF) đặt các quy tắc cơ bản cho cơ sở dữ liệu có tổ chức:

Những quy tắc này có ý nghĩa gì khi suy ngẫm về thiết kế thực tế của một cơ sở dữ liệu? Nó thực sự khá đơn giản.

1. Loại bỏ trùng lặp

Quy tắc đầu tiên quy định rằng chúng ta không được sao chép dữ liệu trong cùng một hàng của một bảng. Trong cộng đồng cơ sở dữ liệu, khái niệm này được gọi là nguyên tử của một bảng. Các bảng tuân thủ quy tắc này được cho là nguyên tử. Hãy cùng khám phá nguyên tắc này với một ví dụ cổ điển: một bảng trong cơ sở dữ liệu nguồn nhân lực lưu trữ mối quan hệ cấp dưới của người quản lý. Với mục đích của ví dụ của chúng tôi, chúng tôi sẽ áp đặt quy tắc kinh doanh mà mỗi người quản lý có thể có một hoặc nhiều cấp dưới trong khi mỗi cấp dưới chỉ có thể có một người quản lý.

Bằng trực giác, khi tạo danh sách hoặc bảng tính để theo dõi thông tin này, chúng tôi có thể tạo một bảng với các trường sau:

Tuy nhiên, hãy nhớ lại quy tắc đầu tiên được áp đặt bởi 1NF: Loại bỏ các cột trùng lặp khỏi cùng một bảng. Rõ ràng, các cột Subordinate1-Subordinate4 trùng lặp. Hãy dành một chút thời gian và suy nghĩ về những vấn đề được đưa ra bởi kịch bản này. Nếu một người quản lý chỉ có một cấp dưới, các cột Subordinate2-Subordinate4 chỉ đơn giản là lãng phí không gian lưu trữ (một hàng hóa cơ sở dữ liệu quý giá). Hơn nữa, hãy tưởng tượng trường hợp người quản lý đã có 4 cấp dưới - điều gì sẽ xảy ra nếu cô ấy tiếp nhận một nhân viên khác? Toàn bộ cấu trúc bảng sẽ yêu cầu sửa đổi.

Tại thời điểm này, một ý tưởng sáng thứ hai thường xảy ra với những người mới sử dụng cơ sở dữ liệu: Chúng tôi không muốn có nhiều hơn một cột và chúng tôi muốn cho phép một lượng lưu trữ dữ liệu linh hoạt. Hãy thử một cái gì đó như thế này:

Và trường cấp dưới sẽ chứa nhiều mục nhập dưới dạng "Mary, Bill, Joe".

Giải pháp này là gần hơn, nhưng nó cũng rơi ngắn của nhãn hiệu. Cột cấp dưới vẫn còn trùng lặp và không nguyên tử. Điều gì xảy ra khi chúng ta cần phải thêm hoặc loại bỏ một cấp dưới? Chúng ta cần phải đọc và viết toàn bộ nội dung của bảng. Đó không phải là một vấn đề lớn trong tình huống này, nhưng nếu một người quản lý có một trăm nhân viên thì sao? Ngoài ra, nó phức tạp quá trình lựa chọn dữ liệu từ cơ sở dữ liệu trong các truy vấn trong tương lai.

Dưới đây là bảng thỏa mãn quy tắc 1NF đầu tiên:

Trong trường hợp này, mỗi cấp dưới có một mục duy nhất, nhưng người quản lý có thể có nhiều mục nhập.

2. Xác định khóa chính

Bây giờ, điều gì về quy tắc thứ hai: xác định mỗi hàng với một cột duy nhất hoặc tập hợp các cột ( khóa chính )? Bạn có thể xem bảng bên trên và đề xuất sử dụng cột cấp dưới làm khóa chính. Trong thực tế, cột cấp dưới là một ứng cử viên tốt cho khóa chính do thực tế rằng quy tắc kinh doanh của chúng tôi đã chỉ định rằng mỗi cấp dưới có thể chỉ có một người quản lý. Tuy nhiên, dữ liệu mà chúng tôi đã chọn để lưu trữ trong bảng của chúng tôi làm cho giải pháp này ít hơn lý tưởng. Điều gì sẽ xảy ra nếu chúng tôi thuê một nhân viên khác tên là Jim? Làm cách nào để chúng tôi lưu trữ mối quan hệ cấp dưới của người quản lý của bạn trong cơ sở dữ liệu?

Tốt nhất là sử dụng một số nhận dạng thực sự duy nhất (chẳng hạn như ID của nhân viên) làm khóa chính . Bảng cuối cùng của chúng ta sẽ trông như sau:

Bây giờ, bảng của chúng ta ở dạng bình thường đầu tiên! Nếu bạn muốn tiếp tục tìm hiểu về bình thường hóa, hãy đọc các bài viết khác trong loạt bài này: