Khi các ngày lễ đang đến nhanh chóng, ông già Noel cần thêm một số trợ giúp để chuyển quà cho trẻ em trên khắp thế giới. Hôm nay, chúng tôi sẽ phát triển một mô hình dữ liệu có thể giúp ông già Noel và các chú lùn của ông ấy làm việc hiệu quả hơn.
Bối cảnh
Công việc của ông già Noel là vô cùng quan trọng, vì vậy ông cần làm mọi thứ có thể để đảm bảo thành công đúng giờ. Chỉ cần nhớ tất cả các vấn đề mà Howard gặp phải trong ‘Jingle All the Way’ khi cố gắng tìm một nhân vật Turbo Man duy nhất — chúng ta không thể để ông già Noel trượt chân một lần nữa, nếu không danh tiếng của ông ấy sẽ bị hủy hoại. Vì vậy, để giúp ông già Noel luôn ngăn nắp, chúng tôi sẽ chia các hoạt động của ông thành ba giai đoạn chính.
-
Lập kế hoạch
Đầu tiên, ông già Noel cần lên kế hoạch cho mọi thứ. Rốt cuộc, anh ta không thể để những chú lùn của mình chạy quanh nhà máy và hoảng sợ khi họ cố gắng hiểu ra hàng tỷ lượt giao hàng! Ngoài việc đọc các lá thư của năm nay và xác định những món quà mà trẻ em muốn, chúng ta cũng nên phân tích bất kỳ xu hướng nào từ những năm trước để thu thập một số tài liệu phổ biến hoặc thậm chí sản xuất quà tặng trước thời hạn. Điều này sẽ giúp giảm bớt một số công việc tồn đọng khi chúng tôi bắt đầu tiến hành sản xuất.
-
Sản xuất
Sau giai đoạn lập kế hoạch, chúng tôi đã sẵn sàng để bắt đầu sản xuất quà. Với sự giúp đỡ của các chú lùn của ông già Noel, chúng tôi có thể nhanh chóng sản xuất và gói quà theo danh sách mong muốn mà chúng tôi nhận được. Tuy nhiên, để làm cho quá trình hiệu quả hơn, chúng ta cần tổ chức tất cả các tài liệu và thông tin mà chúng ta có trong tay để các yêu tinh có thể lấy những thứ họ cần càng nhanh càng tốt.
-
Giao hàng
Thời điểm đang nhanh chóng đến gần! Tuần lộc của ông già Noel đã sẵn sàng và bản thân người đàn ông đang lo lắng kiểm tra đồng hồ của mình. Những món quà nhanh chóng được những người trợ giúp của ông già Noel chất vào xe trượt tuyết. Tại thời điểm này, ông già Noel đang xem lại lịch trình của mình để đảm bảo rằng ông có tất cả các địa chỉ phù hợp, cũng như bất kỳ ghi chú nào mà ông sẽ cần xem xét.
Bây giờ chúng ta đã có một chút thông tin cơ bản về loại thông tin cần làm, cuối cùng chúng ta cũng có thể bắt đầu thiết kế mô hình dữ liệu của ông già Noel.
Mô hình dữ liệu
Mô hình dữ liệu này bao gồm ba phần:
- Các mặt hàng
- Người và Danh sách mong muốn
- Giao hàng
Hãy xem xét kỹ hơn từng điều này.
Phần 1:Các mặt hàng
Mô hình dữ liệu của chúng tôi bắt đầu với phần Mục, chứa nhiều bảng là trung tâm của hai phần còn lại.
item_type
bảng được cho là quan trọng nhất ở đây. Bảng này chứa danh sách tất cả các mặt hàng mà chúng tôi sẽ cần để sản xuất tại nhà máy của ông già Noel. Đối với mỗi mặt hàng, chúng tôi sẽ lưu trữ các thông tin sau:
-
item_name
- tên của mặt hàng. -
properties
- các cặp khóa-giá trị dạng văn bản biểu thị kích thước, hình dạng, màu sắc và các thuộc tính khác của mặt hàng được sản xuất, lưu trữ ở định dạng có cấu trúc. -
description
- mô tả bằng văn bản không có cấu trúc của mặt hàng.
Nếu chúng tôi từng có hai mục giống nhau chỉ khác nhau về một số thuộc tính của chúng, chẳng hạn như màu sắc, chúng tôi sẽ tiếp tục và lưu trữ chúng dưới dạng các bản ghi riêng lẻ trong bảng.
Đối với mục đích của mô hình dữ liệu của chúng tôi, chúng tôi sẽ giả định rằng ông già Noel sẽ không mua quà mà thay vào đó sẽ ra lệnh cho các chú lùn của mình sản xuất mọi thứ trong nhà. Đối với mỗi loại mặt hàng khác nhau, chúng tôi sẽ có một danh sách các điều kiện tiên quyết mà chúng tôi phải đáp ứng. Đây có thể là lao động hoặc các vật liệu như gỗ, nhựa, kim loại và sơn. Chúng tôi sẽ cần lưu trữ danh sách tất cả các điều kiện tiên quyết có thể có và liên hệ chúng với từng mặt hàng mà chúng tôi cần sản xuất. Chúng tôi sẽ sử dụng bốn bảng để đạt được điều này.
Bảng đầu tiên trong số bốn bảng này là prerequisite
, như tên cho thấy, lưu trữ một danh sách tất cả các điều kiện tiên quyết có thể có. Đối với mỗi bản ghi trong bảng này, chúng tôi sẽ lưu trữ một tên điều kiện tiên quyết duy nhất, tất cả các thuộc tính properties
bổ sung (lần này ở định dạng không có cấu trúc) và tham chiếu đến prerequisite_type
và từ điển đơn vị. prerequisite_type
từ điển sẽ được sử dụng để lưu trữ danh sách tất cả các danh mục tiên quyết, chẳng hạn như “lao động” và “vật liệu”. unit
từ điển sẽ được sử dụng để lưu trữ danh sách tất cả các đơn vị mà chúng tôi sẽ sử dụng để định lượng các điều kiện tiên quyết của chúng tôi. Ví dụ:chúng ta có thể mong đợi lao động được đo bằng giờ hoặc phút và vật liệu được đo bằng chi phí sản xuất (đô la), trọng lượng (kg) hoặc thể tích (lít).
Bảng cuối cùng trong phần này là warehouse
, chúng tôi sẽ sử dụng để theo dõi trạng thái hiện tại của khoảng không quảng cáo của chúng tôi cho cả mặt hàng và vật liệu (do đó, item_type_id
và prerequisite_id
khóa ngoại). Chỉ một trong hai khóa này sẽ chứa một giá trị tại bất kỳ thời điểm nhất định nào. Ngoài những khóa này, chúng tôi sẽ lưu trữ quantity
cuối cùng đã có trên một warehouse_date
cụ thể .
Phần 2:Người và Danh sách mong muốn
Một phần quan trọng trong mô hình dữ liệu của chúng tôi, phần này đề cập đến những thứ mà trẻ em muốn tìm thấy dưới cây thông Noel của chúng! Chúng tôi sẽ làm việc từ phải sang trái.
Hai bảng ngoài cùng bên phải là country
và city
. Chúng tôi sẽ sử dụng hai bảng này khi tham chiếu vị trí của một đứa trẻ đã gửi cho ông già Noel một danh sách điều ước. country
bảng chỉ chứa country_name
duy nhất thuộc tính và danh sách tất cả countries
hiện có . Để chính xác hơn với các vị trí của chúng tôi, chúng tôi sẽ sử dụng city
bảng để lưu trữ tất cả các thành phố Ông già Noel sẽ cần đến thăm. Đối với mỗi thành phố trong bảng này, chúng tôi sẽ lưu trữ:
-
city_name
- tên thành phố, không nhất thiết phải là duy nhất. -
postal_code
- mã bưu điện của thành phố. -
country_id
- id của quốc gia mà thành phố tọa lạc. Cùng với hai thuộc tính trước đó, thuộc tính này tạo thành khóa duy nhất cho bảng này. -
latitude
vàlongitude
- được sử dụng để giúp ông già Noel tìm thành phố trên bản đồ của ông ấy hoặc nhập tọa độ của nó vào hệ thống định vị mà ông ấy sử dụng.
Tất nhiên, bạn không thể có mong muốn nếu không có mọi người! Chúng tôi sẽ lưu trữ danh sách tất cả những người trong person
bàn. Đối với mỗi cá nhân, chúng tôi sẽ lưu trữ một first_name
, last_name
, birth_date
và city
. Chúng tôi cũng sẽ lưu trữ địa chỉ của người đó cũng như bất kỳ delivery_details
bổ sung nào Ông già Noel có thể cần xem xét (chẳng hạn như một ghi chú cho biết rằng một người không có ống khói).
Bảng cuối cùng của phần này chứa đầy đủ wish_list
lưu trữ tất cả các điều ước Giáng sinh từng được thực hiện. Đối với mỗi điều ước, chúng ta cần biết:
-
person_id
- đề cập đến người đã thực hiện điều ước. -
item_type_id
- tham chiếu đến (loại) mặt hàng mà người đó yêu cầu. -
quantity
- số lượng mong muốn của mặt hàng được chỉ định trong điều ước. -
details
- tất cả thông tin chi tiết có thể giúp ông già Noel hoàn thành điều ước. -
ts
- biểu thị thời điểm điều ước được lưu trữ trong hệ thống của chúng tôi, điều này rất quan trọng để xác định năm thực hiện điều ước. -
gift_id
- tham chiếu đến bảng quà biểu thị món quà đã được chuyển đến để thực hiện mong muốn này.
Phần 3:Giao hàng
Bây giờ, cuối cùng chúng ta cũng đã đến phần thú vị nhất trong mô hình dữ liệu của mình — quà tặng và giao hàng!
Sau khi một mặt hàng được sản xuất, chúng tôi sẽ chèn bản ghi liên quan của nó vào item
bàn. Lưu ý rằng khi một mặt hàng được sản xuất, nó vẫn chưa được gán cho bất kỳ món quà nào, vì vậy gift_id
thuộc tính sẽ chứa giá trị null cho đến khi mặt hàng được liên kết với một món quà cụ thể. Chúng tôi cũng sẽ cần lưu trữ loại mặt hàng đã được sản xuất (item_type_id
), cũng như quantity
của nó . Mặc dù số lượng của một mặt hàng chủ yếu là 1, nhưng chúng ta có thể mong đợi số lượng khác nhau trong một số trường hợp đặc biệt (ví dụ:nhiều hơn 1 mặt hàng được kết hợp thành một bộ — điều này rất bất thường nhưng vẫn có thể xảy ra).
Tiếp tục, chúng tôi sẽ kết hợp một hoặc nhiều mặt hàng để tạo ra một gift
. Chúng tôi sẽ cập nhật item.gift_id
khi chúng tôi đã đóng gói các mặt hàng đã chọn của mình vào món quà đó. Mỗi món quà sẽ được chuyển đến người có liên quan (person_id
) và sẽ có trạng thái theo dõi (current_status_id
), cũng như dấu thời gian về thời điểm ông già Noel định giao quà (delivery_time_planned
). Chúng tôi cũng sẽ cập nhật giá trị của wish_list.gift_id
thuộc tính cho tất cả các mặt hàng đã được phân phối thành công.
Hai bảng cuối cùng trong mô hình dữ liệu này liên quan đến việc theo dõi các trạng thái phân phối. Đầu tiên, status
bảng chứa một status_name
duy nhất giá trị mà chúng tôi sẽ sử dụng khi tham chiếu trạng thái hiện tại của gft (gift.current_status_id
). Ngoài ra, status_history
bảng sẽ lưu trữ danh sách tất cả trạng thái cho tất cả quà tặng trong cơ sở dữ liệu của chúng tôi, cũng như dấu thời gian của tất cả các cập nhật trạng thái (ts).
Hy vọng rằng mô hình dữ liệu của chúng tôi sẽ giúp ông già Noel hoàn thành một năm giao hàng thành công nữa để tất cả chúng ta có thể nhận quà đúng giờ. Nếu bạn có hứng thú với SQL theo chủ đề Giáng sinh hơn, Học viện Vertabelo đã chuẩn bị một thử thách đặc biệt dành cho ngày lễ gồm 24 truy vấn. Hãy tiếp tục và kiểm tra nó ra! Thay mặt cho gia đình Vertabelo, chúng tôi hy vọng bạn có một Giáng sinh tuyệt vời!