Thông thường, cách tốt nhất để học một thứ gì đó là thực hành nó trong một tình huống thực tế. Rõ ràng, điều tương tự cũng áp dụng cho mô hình cơ sở dữ liệu. Do đó, trong bài viết này, tôi quyết định hướng dẫn bạn cách tạo một cấu trúc cơ sở dữ liệu đơn giản, lấy một ví dụ trong sách giáo khoa về hệ thống đặt phòng khách sạn. Tôi sẽ chỉ cho bạn cách bắt đầu và cung cấp cho bạn một số ý tưởng để mở rộng mô hình.
Mô hình hóa cơ sở dữ liệu:Khám phá, Khám phá, Khám phá
Trong bài viết này, chúng tôi sẽ thiết kế một mô hình dữ liệu cho một hệ thống đặt phòng khách sạn. Chúng tôi tìm kiếm một mô hình dữ liệu nơi chúng tôi có thể đại diện cho thông tin về phòng, khách và các đặt phòng đã đặt tại Khách sạn VERTABELO ***** tưởng tượng của chúng tôi. Tất cả thông tin này sẽ được lưu trữ trong các bảng.
Mô hình hóa cơ sở dữ liệu là một quá trình khám phá tuần hoàn. Đầu tiên chúng ta xác định các bảng chính và các thuộc tính của nó. Trong mô hình của chúng tôi, các bảng chính là:room
, guest
và reservation
. Sau đó, chúng tôi tiếp tục tinh chỉnh bảng của mình bằng cách khám phá các thuộc tính hoặc cột của chúng. Ví dụ:room
bảng có các thuộc tính như:phòng number
, name
và smoke
gắn cờ trong số những người khác.
Reservation
bảng có các thuộc tính date_in
, date_out
, status
(đã hủy, đã xác nhận) và made_by
(trực tuyến, trong_người, điện thoại, thư), trong khi các thuộc tính của bảng guest
là:first_name
, last_name
và member_since
. Có lẽ bạn cảm thấy thích reservation
bảng cần nhiều thuộc tính hơn (như loại phòng, số giường), chúng tôi sẽ đề cập đến điểm này sau, cho đến lúc đó, hãy xem xét reservation
bảng không đầy đủ. Mô hình dữ liệu sau được tạo trong Vertabelo hiển thị các bảng chính.
Loại dữ liệu:Miền có giá trị được phép cho cột là gì?
Lưu ý rằng mọi cột đều có kiểu dữ liệu (varchar, integer, date, boolean) để cho biết loại giá trị nào có thể được gán cho cột. Ví dụ:cột smoke
trên bàn room
là boolean kiểu dữ liệu, nghĩa là chỉ đúng hoặc sai là các giá trị được phép.
Chìa khóa chính:Số an sinh xã hội của mọi hồ sơ
Mỗi bảng phải có một cột (hoặc nhiều hơn một) đóng vai trò là mã định danh cho mọi bản ghi trong bảng. Cột này được gọi là khóa chính (PK) và các phương pháp hay nhất về thiết kế cơ sở dữ liệu đề xuất rằng mọi bảng phải có PK.
Nếu chúng ta xem xét mô hình dữ liệu Vertabelo trước đó, chúng ta sẽ thấy rằng mọi bảng đều có một cột được gọi là id
với một chỉ báo PK ở bên phải. Các cột id này tạo thành PK (theo quy ước, chúng tôi đặt tên là id
cột PK).
Một khái niệm quan trọng, có lẽ rõ ràng đối với nhiều người đọc, là cột PK không được có các giá trị trùng lặp. Nói cách khác, mọi cột PK đều có một ràng buộc duy nhất và mọi nỗ lực tạo bản ghi mới với giá trị trùng lặp sẽ bị từ chối do lỗi bởi trình quản lý cơ sở dữ liệu.
Tiếp tục Khám phá; Tìm đối tượng cơ sở dữ liệu mới
Đặt trước là một trong những yếu tố phức tạp hơn để biểu diễn trong mô hình dữ liệu này. Một đặt phòng có thể có nhiều phòng được liên kết với nó (ví dụ:“Tôi muốn đặt một phòng đôi và một phòng riêng biệt có 3 giường cho con tôi”). Yêu cầu kinh doanh này bổ sung 4 điều vào mô hình của chúng tôi:
Một bảng mới: Chúng tôi cần tạo một bảng mới có tên room_reserved
, nơi chúng tôi lưu trữ tất cả các phòng thuộc về một yêu cầu đặt trước.
Thêm hai tham chiếu: Tham chiếu là một phần tử rất quan trọng trong mô hình dữ liệu. Tham chiếu mô tả cách một bảng có liên quan với một bảng khác. Trong mô hình của chúng tôi, mỗi phòng được đặt trước thuộc về một đặt phòng, vì vậy chúng tôi sẽ sử dụng một tham chiếu để mô hình hóa thực tế đó. Tham chiếu này được biểu diễn bằng đồ thị dưới dạng một đường nối cả hai bảng.
Hơn nữa, vì mỗi đặt phòng thuộc về một khách, chúng tôi cần tạo một tham chiếu mới liên kết guest
và reservation
những cái bàn.
Di chuyển cột: Vì chúng tôi có thể có một số phòng thuộc một đặt phòng, chúng tôi phải cho phép hủy trên mỗi phòng riêng lẻ, sau đó chúng tôi di chuyển thuộc tính attribute
trạng thái từ reservation
tới reserved_room
bảng.
Mô hình dữ liệu cập nhật được hiển thị trong sơ đồ sau được thiết kế trong Vertabelo:
Điều gì xảy ra với các bảng được liên kết bởi một tham chiếu?
Khi chúng tôi tạo một tham chiếu giữa hai bảng, một cột mới sẽ được thêm vào một trong các bảng. Cột vừa thêm này được gọi là Khóa ngoại và hoạt động như một con trỏ tới bảng khác cho phép kết nối giữa các bảng. Ví dụ:hãy xem các sơ đồ sau:
Hình. 1 Các bảng reservation
và guest
trước và sau khi thêm tham chiếu
Tiếp tục Khám phá; Tìm hiểu thêm
Một điểm đang chờ xây dựng mô hình là thực tế một số khách có thể sử dụng phòng trong một khoảng thời gian. Để trình bày thực tế kinh doanh này, chúng tôi đã thêm 2 bảng:hosted_at
và occupied_room
.
Lưu ý rằng mỗi người ở lại khách sạn sẽ có một hồ sơ trong hosted_at
. Hồ sơ này sẽ liên quan đến căn phòng mà anh / cô ấy đã ở và khách. Đây là lý do tại sao hosted_at
có tham chiếu kép tới guest
và occupied_room
.
Bảng occupied_room
sẽ có một bản ghi cho mỗi phòng được thuê, trong bản ghi này, chúng tôi có thể tìm thấy các trường:check_in
và check_out
thuộc loại dấu thời gian cho biết thời điểm bắt đầu và kết thúc thuê. Kiểu dữ liệu dấu thời gian lưu trữ một điểm trong thời gian với độ chính xác tùy ý. Mọi occupied_room
bản ghi cũng sẽ có tham chiếu đến số phòng đang được thuê và gián tiếp qua hosted_at
cho những vị khách đã lưu trú tại phòng này.
Chúng tôi cũng đã thêm bảng room_type
đến mô hình dữ liệu; ý tưởng là nhóm các phòng theo loại phòng hoặc loại phòng. Ví dụ:"tiêu chuẩn một giường đôi", "2 giường đôi sang trọng" có thể là mô tả loại. Chúng tôi cũng có thuộc tính max_capacity ở đây.
Bài tập: Thiết kế cơ sở dữ liệu là một ngành dễ tiếp cận, tuy nhiên, để trở thành một chuyên gia về chủ đề này cần có thời gian. Nếu bạn đang thực hiện các bước đầu tiên về thiết kế cơ sở dữ liệu, hãy cố gắng hoàn thành mô hình dữ liệu hiện tại để cho phép:
- Nếu hai hoặc nhiều khách ở chung phòng, hãy cho phép từng khách nhận phòng và trả phòng khác nhau.
- Trong một số trường hợp, khách sạn có thể thay đổi cấu hình của phòng (ví dụ:từ tiêu chuẩn 1 giường đôi sang 2 giường đôi sang trọng). Thêm vào mô hình dữ liệu các phần tử để đại diện cho những thay đổi cấu hình đó, duy trì lịch sử của mọi phòng.