Ngày nay, đi chung xe đã được mọi người trên toàn cầu chấp nhận và cổ vũ. Nó chắc chắn làm giảm lượng khí thải carbon cá nhân của một người và có thể tiết kiệm chi phí hơn so với thuê hoặc mua một chiếc ô tô.
Đi chung xe cũng cần rất nhiều công việc - công việc tổ chức có thể dễ dàng được thực hiện bởi một cơ sở dữ liệu được thiết kế tốt. Bài viết này giải thích mô hình dữ liệu chi tiết mà trang web đi chung xe có thể sử dụng.
Thiết kế dữ liệu, đáp ứng đi chung xe
Vì vậy, chúng tôi cần thiết kế mô hình dữ liệu cho trang web chia sẻ xe (hay còn gọi là đi chung xe).
Đi chung xe hơi khác một chút so với thuê xe hơi. Trong dịch vụ đi chung xe, xe thuộc sở hữu của một người và họ cung cấp dịch vụ đi chung xe cho những người khác. Mọi người đi cùng thanh toán chi phí đi lại, bao gồm nhiên liệu, phí cầu đường, v.v.
Yêu cầu của Dự án:
- Trang web phải cho phép người dùng (hay còn gọi là thành viên đi chung xe) để tự đăng ký bằng tên, số điện thoại, địa chỉ email, số bằng lái xe, v.v.
- Các thành viên phải được phép đặt tùy chọn của họ liên quan đến các chuyến đi và bạn đồng hành.
- Các thành viên được gọi là chủ sở hữu chuyến đi có thể tạo chuyến đi bằng cách nhập chi tiết chuyến đi của họ (tức là điểm xuất phát và điểm đến, thời gian bắt đầu, chi phí cho mỗi người lái, v.v.)
- Các thành viên khác có thể tìm kiếm các chuyến đi có sẵn đến thành phố đích .
- Các thành viên đang tìm kiếm một chuyến đi có thể liên hệ với chủ sở hữu chuyến đi và đặt đặt chỗ cho chỗ ngồi của họ.
- Chủ sở hữu chuyến xe có thể phê duyệt hoặc từ chối các yêu cầu đặt chỗ.
- Dựa trên hành động của chủ sở hữu chuyến xe đối với yêu cầu đặt chỗ, số lượng chỗ còn trống sẽ được cập nhật.
- Chủ sở hữu chuyến đi cũng có thể đánh dấu các thành phố trên đường đi, là các thành phố trên đường đi từ điểm xuất phát đến điểm đến của họ. Nếu họ muốn, chủ sở hữu chuyến xe cũng có thể cung cấp người đến các thành phố trên đường đi.
Với những thông số này, hãy xác định các thực thể và mối quan hệ chính cho mô hình dữ liệu đi chung xe của chúng tôi.
Xác định các thực thể và mối quan hệ
Khi tôi nhìn thấy các yêu cầu một cách tổng thể, tôi có thể dễ dàng tìm ra các thực thể chính. Đó là:
- thành viên (bao gồm cả chủ sở hữu người lái xe và bạn đồng hành )
- ô tô
- tùy chọn
- đi xe
- thành phố
- yêu cầu đi xe
Thành viên - Tất cả những người truy cập trang web này phải đăng ký trước khi sử dụng nó. Trong quá trình này, họ cần cung cấp các chi tiết như first_name
, last_name
, gender
, email
và contact number
. Đối với những người đi chung, những vật dụng này là đủ. Chủ sở hữu xe, người có lẽ sẽ lái xe, cần điền vào một số chi tiết bổ sung như driving_license_number
và driving_license_valid_from
cũng nên được bao gồm. Thông tin giấy phép cho những người cùng đi du lịch biết điều gì đó về trải nghiệm lái xe của chủ sở hữu chuyến đi. Điều này sẽ giúp những người đồng hành cùng lựa chọn chuyến đi tốt nhất hiện có. Tôi sẽ thêm một bảng có tên member
với tất cả các cột bắt buộc.
Xe ô tô - Chủ sở hữu chuyến đi cần thêm thông tin chi tiết cho ít nhất một xe trước khi tạo chuyến đi. Vì vậy, hãy tạo một bảng khác, được gọi là car
, để lưu trữ thông tin này. Một thành viên có thể sở hữu nhiều hơn một xe ô tô. Một chuyến đi có thể phụ thuộc vào một cặp xe thành viên, vì vậy chúng ta cần một bảng khác để thiết lập mối quan hệ này. Chúng tôi sẽ gọi bảng này là member_car
. Tôi sẽ tham chiếu khóa chính của bảng này trong ride
bảng nơi tôi sẽ lưu trữ thông tin chi tiết về chuyến đi. Tôi cũng sẽ thêm một cột, đó là comfort_level
, lưu trữ mức độ tiện nghi của một chiếc ô tô trên thang điểm từ 0 đến 5. Mức này được hệ thống tính toán tự động, dựa trên các thông tin chi tiết về chiếc xe do thành viên khác cung cấp.
Tùy chọn - Quyền ưu tiên quan trọng đối với tất cả mọi người. Trang web cho phép các thành viên điền sở thích của họ về chiếc xe và những người bạn đồng hành của họ. Các chi tiết này vẫn là tùy chọn tại thời điểm đăng ký, nhưng phải được điền trước khi tạo chuyến đi . Chủ sở hữu chuyến đi có thể sẽ tìm kiếm những người có cùng sở thích để mọi người đi lại thoải mái. Những người đang tìm kiếm chuyến đi cũng làm như vậy.
Một số sở thích cơ bản cho việc di chuyển bằng ô tô là:
- Hút thuốc trong xe có được phép không?
- Có được phép mang theo vật nuôi không?
- Người chủ xe nói nhiều như thế nào? Mức độ nói nhảm có thể chấp nhận được trong quá trình đi xe? (Các câu trả lời có thể có ở đây bao gồm không, trò chuyện nhẹ, gabfest.)
- Chủ sở hữu chuyến xe thích loại nhạc nào?
- Chủ sở hữu chuyến xe cho phép âm lượng nhạc nào?
Vì những chi tiết này là tùy chọn trong quá trình đăng ký, tôi sẽ tạo một bảng khác có tên member_preference
để lưu trữ các chi tiết này. Hai bảng bổ sung lưu trữ các tùy chọn có thể có cho âm nhạc (music_preference
) và cuộc trò chuyện trong ô tô (chitchat_preference
).
Hãy có mối quan hệ không đối một giữa member
và member_preference
bảng, vì các thành viên có thể hoặc không thể đặt tùy chọn của họ vào hệ thống khi họ đăng ký và chỉ có một bản ghi cho các tùy chọn cho mỗi thành viên.
Thành phố - Một bảng chính, city
, là cần thiết để lưu trữ danh sách tất cả các thành phố do trang web phục vụ. Nó phải bao gồm thông tin quốc gia và tiểu bang có liên quan cho mỗi thành phố.
Đi xe - Thành viên có thể tạo chuyến đi bằng cách điền vào xe mình đang đi; anh ta đang bắt đầu từ thành phố nào; anh ta đang hướng tới thành phố nào; ngày và giờ của cuộc hành trình; số lượng chỗ ngồi còn trống; và đóng góp trên đầu người. Khoản đóng góp trên đầu người là số tiền mà mỗi người cùng đi du lịch phải trả cho chi phí đi xe. Chủ sở hữu chuyến đi cũng có thể đề cập đến số lượng hành lý mà anh ta đang mong đợi từ những người đi cùng để mọi thứ sẽ vừa vặn trên xe. Vì vậy, chúng tôi thêm một cột, luggage_size_allowed
, cho mặt hàng này. Các giá trị có thể có cho cột này sẽ là nhẹ, trung bình và nặng.
Yêu cầu đi xe - Các thành viên có thể xem danh sách các chuyến đi có sẵn từ thành phố này đến thành phố khác hoặc đặt yêu cầu cho một chuyến đi cụ thể. Chúng tôi chắc chắn cần một bảng để lưu trữ thông tin chi tiết về các yêu cầu như vậy. Một bảng được gọi là request
phù hợp với mục đích. Yêu cầu ban đầu được nhập dưới dạng yêu cầu ‘đã gửi’ và chủ sở hữu chuyến xe là người duy nhất được phép phê duyệt hoặc từ chối yêu cầu đó. Số lượng chỗ trống trong bàn đi xe sẽ được điều chỉnh cho mỗi lần phê duyệt và / hoặc từ chối.
Thành phố trên đường đi - Chia sẻ chuyến đi không phải là tất cả về việc đi thẳng từ điểm xuất phát đến điểm đến. Một người cũng có thể chia sẻ chuyến đi với những người khác đến các thành phố trên đường đi. Ví dụ:nếu một người đàn ông đi từ Chicago đến Miami, anh ta có thể đón một người nào đó muốn đi từ Chicago đến Nashville. Nashville là một trong những thành phố anh ấy sẽ đi qua trong lộ trình của mình, vì vậy nó là một thành phố trên đường đi. Hệ thống của chúng tôi sẽ cho phép chủ sở hữu chuyến xe thiết lập các thành phố trên đường đi dựa trên tuyến đường mà họ sẽ đi theo để đến đích. Nếu bạn đồng hành muốn, họ có thể xuống tại bất kỳ thành phố nào trên đường bay; chi phí đi lại của họ sẽ được đánh giá theo tỷ lệ tương ứng.
Chúng tôi sẽ tạo một bảng khác có tên là enroute_city
vì mục đích này. Hồ sơ sẽ được thêm khi chủ sở hữu chuyến xe thêm các thành phố trên đường đi vào chuyến đi của họ. Sau đó, các thành viên có thể yêu cầu đặt chỗ để đi đến một trong các thành phố trên đường bay. Do đó, tôi tham chiếu khóa chính của bảng này vào request
bàn.
order_from_source
trong enroute_city
bảng biểu thị lộ trình mà chủ sở hữu chuyến đi sẽ theo dõi trong suốt cuộc hành trình.
Báo cáo trên trang web:
Có nhiều báo cáo khác nhau (trích xuất dữ liệu) có thể được hiển thị trên trang web này. Hãy để tôi giải thích một vài trong số chúng:
-
Các chuyến đi có sẵn từ thành phố cụ thể này đến thành phố cụ thể khác - Đây là một trong những báo cáo sẽ được trích xuất khá thường xuyên, vì nó mô tả ý chính của trang web này. Hầu hết các thành viên sẽ truy cập trang web này để tìm kiếm các lựa chọn thay thế du lịch hoặc chia sẻ chuyến đi. Khi trích xuất báo cáo này, các thành viên cần nhập tên thành phố xuất phát và điểm đến. SQL sau:
Select m.first_name || ‘ ‘ || m.last_name as “Ride Owner”, c.name as “Car”, c.comfort_level as “Comfort Level”, mp.is_smoking_allowed, mp.is_pet_allowed, r.travel_start_time, r.contribution_per_head, seats_offered from ride r, member_car mc, car c, member m, member_preference mp where r.member_car_id = mc.id and mc.member_id = u.id and mc.car_id = c.id and m.id = mp.member_id and source_city_id = (select city_id from city where city_name = ‘CHICAGO’) and destination_city_id = (select city_id from city where city_name = ‘MIAMI’) and seats_offered > (select count(id) from request req, request_status reqs where req.request_status_id = reqs.id and upper(reqs.description) = ‘APPROVE’ and req.ride_id = r.id);
-
Danh sách các yêu cầu đã gửi / được chấp thuận cho một chuyến đi - Báo cáo này sẽ được hiển thị cho chủ sở hữu chuyến xe. Nó sẽ hiển thị ai đã gửi yêu cầu đi xe và chủ sở hữu chỉ có thể thực hiện hành động đối với các yêu cầu từ báo cáo này. SQL cho điều này như sau:
select first_name || ‘ ‘ || last_name as “Submitter”, req.created_on as “Submitted on”, rs.description as “Request Status” from member m, request req, request_status rs where m.id = req.requester_id and rs.id = req.request_status_id and req.ride_id =
; -
Các chuyến đi trước đây và hiện tại được cung cấp - Các báo cáo này sẽ được hiển thị cho chủ sở hữu đi xe trên bảng điều khiển của riêng họ. SQL sau có thể được sử dụng để tạo danh sách các chuyến đi mà chủ sở hữu chuyến đi hiện đang cung cấp:
Select m.first_name || ‘ ‘ || m.last_name as “Ride Owner”, c.name as “Car”, c.comfort_level as “Comfort Level”, mp.is_smoking_allowed, mp.is_pet_allowed, r.travel_start_time, r.contribution_per_head, decode(seats_offered,0,’FULL’, seats_offered || ‘ seats available‘) from ride r, member_car mc, car c, member m, member_preference mp where r.member_car_id = mc.id and mc.member_id = m.id and mc.car_id = c.id and u.id = mp.member_id and r.travel_start_time >= sysdate and m.id =
; Và SQL này có thể được sử dụng để trích xuất danh sách các chuyến đi đã được cung cấp trước đó:
Select m.first_name || ‘ ‘ || m.last_name as “Ride Owner”, c.name as “Car”, c.comfort_level as “Comfort Level”, mp.is_smoking_allowed, mp.is_pet_allowed, r.travel_start_time, r.contribution_per_head, decode(seats_offered,0,’FULL’, seats_offered || ‘ seats available‘) from ride r, member_car mc, car c, member m, member_preference mp where r.member_car_id = mc.id and mc.member_id = m.id and mc.car_id = c.id and u.id = mp.member_id and r.travel_start_time < sysdate and m.id =
; -
Danh sách những người cùng đi cùng chuyến đi - Báo cáo này sẽ được cung cấp cho tất cả những người đi cùng, bao gồm cả chủ chuyến đi. Tất cả họ đều có thể tạo danh sách tất cả những người bạn đồng hành cho bất kỳ chuyến đi nào trong quá khứ hoặc tương lai của họ.
select first_name || ‘ ‘ || last_name from member m, request req, request_status rs where m.id = req.requester_id and rs.id = req.request_status_id and rs.description = ‘APPROVED’ and req.ride_id =
UNION select first_name || ‘ ‘ || last_name from member m, member_car mc, ride r where m.id = mc.member_id and mc.id = r.member_car_id and r.id = ;
Mô hình dữ liệu cuối cùng
Còn về Cải tiến thì sao?
Chúng ta có thể cải thiện hơn nữa mô hình này không? Có, chúng tôi có thể! Vẫn còn một số lĩnh vực cần được quan tâm.
Điều gì sẽ xảy ra nếu một người muốn tạo các yêu cầu đi xe định kỳ? Giả sử một người lái xe đi từ thành phố này đến thành phố khác vào mỗi cuối tuần, và họ luôn sẵn lòng chia sẻ chuyến đi này. Yêu cầu lặp lại sẽ thuận tiện hơn.
Làm thế nào một người có thể dựa vào một số anh chàng không quen biết đang mời chào? Nên có một số cách để giúp mọi người đánh giá người khác trước khi yêu cầu một chuyến xe. Một cơ chế khả thi là xuất bản và chia sẻ phản hồi về chủ sở hữu chuyến đi và những người cùng đi. Những chi tiết này chắc chắn sẽ giúp những người khác đặt xe với người lạ tự tin hơn. Để điều này xảy ra, mô hình dữ liệu của chúng tôi cần có những thay đổi nào?
Vui lòng chia sẻ thông tin đầu vào của bạn trên mô hình này.