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

Mô hình cơ sở dữ liệu cho dịch vụ taxi

Gọi chúng là taxi hoặc taxi, những chuyến đi tiện lợi cho thuê này đã có từ nhiều thế kỷ trước. Ngày nay, việc vận hành một dịch vụ taxi phức tạp hơn rất nhiều. Trong bài viết này, chúng ta sẽ xem xét mô hình cơ sở dữ liệu được thiết kế để đáp ứng nhu cầu của một công ty taxi.

Lịch sử của “gọi taxi” bắt đầu từ thế kỷ 17 ở London. Ở hầu hết các nơi, taxi có giá cả phải chăng hơn bao giờ hết. Họ cũng đang trở nên dễ tiếp cận hơn rất nhiều:chúng ta có thể đặt taxi qua điện thoại, qua các ứng dụng di động hoặc trên Web. Hoặc chúng ta có thể sử dụng các kỹ thuật tương tự đã hoạt động hàng trăm năm - xếp hàng ở trạm taxi hoặc cắm cờ trên đường phố.

Mô hình kinh doanh taxi không hề bị trì trệ bởi bất kỳ phương tiện nào. Các khái niệm mới hơn như Uber và Lyft đang trở nên phổ biến và chắc chắn sẽ có tác động đến tương lai của dịch vụ taxi. Tất nhiên, tất cả những điều này làm phức tạp thêm cuộc sống của những người điều hành các công ty taxi. Hãy xem xét các phần thích hợp của mô hình dữ liệu mà một công ty taxi có thể sử dụng để duy trì tổ chức.

Chúng ta muốn đạt được điều gì với Mô hình cơ sở dữ liệu Cab này?

Mô hình được trình bày trong bài viết này sẽ có thể:

  • Tạo lịch trình cho người lái xe
  • Theo dõi tình trạng sẵn có của trình điều khiển trong thời gian thực
  • Cung cấp cho người lái xe một danh sách các chuyến đi tiềm năng
  • Cho phép người lái xe chọn một chuyến đi từ danh sách
  • Tính toán thời gian làm việc và thu nhập của tài xế
  • Lưu trữ các số liệu thống kê khác nhau (ví dụ:tỷ lệ phần trăm chuyến đi bị hủy, khoản thanh toán cho mỗi tài xế mỗi tháng, v.v.)

Chúng ta cần biết gì về các công ty taxi?

Trước khi chúng tôi thiết kế mô hình dữ liệu cho một công ty taxi, chúng tôi có thể trả lời các câu hỏi sau:

  1. Khi nào trình điều khiển hoạt động? Trong hầu hết các công ty taxi, người lái xe có lịch trình xác định trước. Chúng tôi sẽ biết thời gian chính xác khi người lái xe bắt đầu và kết thúc ca làm việc. Trong một số trường hợp, thời gian bắt đầu và kết thúc của ca làm việc không được xác định trước. Ví dụ, các thành viên của hiệp hội taxi có thể đăng nhập và bắt đầu làm việc bất cứ khi nào họ muốn. Họ cũng có thể đăng xuất và kết thúc ca làm việc khi họ chọn. Mô hình của chúng tôi sẽ có thể hỗ trợ cả hai tùy chọn.

  2. Người lái xe có thể làm việc nhiều ca trong cùng một ngày không?
    Nếu người lái xe là thành viên của hiệp hội taxi, họ có thể đi làm vào buổi sáng, về nhà và sau đó làm việc lại vào tối hôm đó. Tuy nhiên, ở một số khu vực (như Thành phố New York), có những hạn chế pháp lý về thời lượng ca làm việc và / hoặc số giờ tài xế taxi có thể làm việc mỗi ngày.

  3. 3. Ai là người khởi xướng chuyến đi?
    Trong hầu hết các trường hợp, khách hàng sẽ liên hệ với tổng đài taxi và nhân viên điều phối sẽ nhập yêu cầu của họ vào hệ thống. Một tình huống khác xảy ra khi khách hàng đặt xe taxi trực tiếp (ví dụ:bằng ứng dụng dành cho thiết bị di động) và không có nhân viên trung tâm cuộc gọi nào tham gia vào quá trình này. Tùy chọn thứ ba - cũng bỏ qua trung tâm cuộc gọi - xảy ra khi khách hàng bắt taxi tại nhà ga hoặc đón một người trên đường.

Mô hình dữ liệu




Mô hình của chúng tôi có hai phần chính và ba bảng chưa được phân loại. Chúng tôi sẽ xem xét kỹ hơn từng người trong số họ.

Phần 1:Cabin, Trình điều khiển và Ca

Mọi thứ bắt đầu với taxi và tài xế:chúng tôi cần ô tô trong một công ty taxi và chúng tôi cần tài xế. (Trong tương lai, chúng tôi có thể sẽ cần điều chỉnh mô hình xe ô tô tự lái của mình. Nhưng chúng ta hãy ở hiện tại.)

Chúng ta sẽ bắt đầu khám phá mô hình dữ liệu với driver bàn. Trong bảng này, chúng tôi sẽ bao gồm các thuộc tính thông thường như tên, họ và ngày sinh. Chúng tôi cũng sẽ có một số thuộc tính khá cụ thể cho mô hình này:

  • driving_licence_number - Đây là số ID hoặc mã chữ và số thường được tìm thấy trên giấy phép do chính phủ cấp. Vì ID này là duy nhất trong thế giới thực, nó cũng sẽ là duy nhất trong cơ sở dữ liệu của chúng tôi. (Ở một số khu vực, tài xế taxi phải có một loại giấy phép hoạt động đặc biệt để làm việc; chúng tôi sẽ cho rằng họ có giấy phép đó.)
  • expiry_date - Đây là ngày bằng lái xe không còn giá trị pháp lý. Lưu ý rằng chúng tôi sẽ không lưu trữ lịch sử giấy phép, vì vậy chúng tôi sẽ chỉ ghi đè driving_licence_numberexpiry_date với dữ liệu mới nếu cần. Nếu muốn lưu trữ lịch sử giấy phép, chúng tôi cần thêm một bảng khác vào mô hình của mình.
  • working - Đây là giá trị Boolean chỉ cần bật và tắt khi trình điều khiển đăng nhập vào hệ thống. Theo mặc định, chúng tôi sẽ đặt thuộc tính này thành “Có” (giá trị 1) và chỉ thay đổi thuộc tính này thành “Không” khi người lái xe không được phép đăng nhập vào hệ thống nữa.

Chúng tôi có thể lưu trữ nhiều thông tin chi tiết khác liên quan đến trình điều khiển trong cơ sở dữ liệu:tên người dùng và mật khẩu, ngày bắt đầu làm việc của mỗi tài xế và loại công việc hiện tại của mỗi tài xế. Chúng tôi sẽ không đi sâu vào những chi tiết này ngay bây giờ vì chúng không liên quan cụ thể đến mô hình này. Tôi sẽ phân loại chúng theo quản trị người dùng, điều này giống nhau trong hầu hết các hệ thống.

Bây giờ, hãy chuyển sang cabcar_model những cái bàn. Đây là nơi chúng tôi sẽ lưu trữ danh sách các xe ô tô mà công ty chúng tôi kinh doanh. Chúng tôi cũng sẽ lưu trữ một số chi tiết nhất định về từng loại xe. Các thuộc tính quan trọng nhất trong hai bảng này là:

  • model_description - Đây là thuộc tính văn bản lưu giữ mô tả do công ty chỉ định về một loại ô tô nhất định. Ví dụ:các công ty taxi có thể muốn lưu trữ số lượng hành khách mà một chiếc xe có thể chở, không gian cốp (cốp) và các thông tin khác.
  • license_plate - Con số trên một biển số xe (biển đăng ký xe hoặc biển số xe) xác định duy nhất một chiếc xe ô tô, cho cả một công ty và cho các mục đích chính phủ. Tất nhiên, chúng ta có thể cần thay đổi thông tin biển số xe nếu mua hoặc bán xe. Trong bảng này, chúng tôi sẽ chỉ lưu trữ các loại xe hiện tại của công ty; nếu cần lưu lại lịch sử, chúng tôi có thể thêm một bảng nữa vào mô hình của mình.
  • owner_id - Thuộc tính này là một tham chiếu đến driver bàn. Nó là tùy chọn vì chúng tôi sẽ chỉ sử dụng nó khi tài xế sở hữu taxi của họ. (Điều này thường xảy ra trong các hiệp hội taxi).
  • active - Đây là giá trị Boolean biểu thị liệu công ty có còn sử dụng ô tô hay không.

Cuối cùng, hãy xem bảng quan trọng nhất trong phần này:shift bàn. Ý tưởng đằng sau bảng này là để lưu trữ giờ làm việc thực tế và lịch làm việc của ô tô và tài xế. Mỗi ca sẽ có ít nhất một taxi (cab_id ) và một trình điều khiển (driver_id ). Ngoài khóa chính, là số ID dịch chuyển duy nhất, đây là các thuộc tính bắt buộc duy nhất trong bảng này.

shift_start_timeshift_end_time thuộc tính là những khoảnh khắc thực tế khi một ca bắt đầu và kết thúc. Thông thường, những điều này đã được cài đặt trước. Trong trường hợp không có lịch trình, như trong liên kết taxi, những thời gian này sẽ giống với login_timelogout_time các thuộc tính tương ứng. login_timelogout_time là thời gian thực tế mà người lái xe đăng nhập (thông qua thiết bị di động trên ô tô của họ hoặc bất kỳ phương thức nào mà hãng taxi sử dụng). Khi tài xế đăng nhập vào hệ thống, danh sách các chuyến xe có sẵn sẽ xuất hiện và tài xế sẽ chọn một chuyến. Tất nhiên, người điều phối cũng sẽ được thông báo rằng trình điều khiển hiện đang làm việc.

Phần 2:Đi xe

Phần này chỉ bao gồm hai bảng, nhưng chúng là trung tâm thực sự của mô hình này.

Trong cab_ride , chúng tôi sẽ lưu trữ một bản ghi cho mỗi chuyến đi tiềm năng. Chúng tôi sẽ cập nhật hồ sơ này theo những gì sẽ xảy ra. Hãy xem tổng quan nhanh về các thuộc tính:

  • shift_id - Đây là tham chiếu đến shift bàn; nó cung cấp cho chúng tôi thông tin chi tiết về tài xế và taxi cho một chuyến đi nhất định.
  • ride_start_timeride_end_time - Các thông tin này được cập nhật khi tài xế báo hiệu rằng họ hiện đang bận (chuyến xe bắt đầu) và sau đó sẽ khả dụng trở lại (chuyến xe kết thúc).
  • address_starting_pointaddress_destination - Đây là những địa điểm bắt đầu và kết thúc chuyến đi. Người lái xe có thể sẽ tìm kiếm cả hai vị trí để nhận thông tin điều hướng trên máy tính bảng hoặc GPS của mình, vì vậy, rất có thể khi chúng tôi cập nhật hai thuộc tính này.
  • GPS_starting_pointGPS_destination - Đây là các tọa độ GPS của các vị trí bắt đầu và kết thúc được mô tả ở trên. Các giá trị này là tùy chọn vì chúng tôi sẽ chỉ cập nhật chúng khi có dữ liệu.
  • canceled - Đây là giá trị Có / Không đơn giản cho chúng tôi biết liệu chuyến đi đã bị hủy hay chưa. Chúng tôi sẽ có hồ sơ về chuyến đi đó trong bảng của mình, vì vậy chúng tôi có thể đánh dấu chuyến đi là đã bị hủy.
  • payment_type_idprice - Những thông tin này cung cấp thông tin về số tiền thanh toán cho một chuyến đi và phương thức thanh toán mà khách hàng sử dụng.

Hầu hết các thuộc tính trong cab_ride bảng có thể chứa giá trị NULL. Có hai lý do cho điều này:

  • Chuyến đi bị hủy, có nghĩa là sẽ không có dữ liệu nào được nhập vào các trường này;
  • Ngay cả khi cuối cùng chúng tôi sẽ có tất cả dữ liệu, chúng tôi sẽ không có tất cả khi bản ghi được chèn lần đầu. Chúng tôi sẽ cập nhật từng hồ sơ nhiều lần - ít nhất, chúng tôi sẽ cập nhật hồ sơ khi chuyến xe bắt đầu và kết thúc (hoặc bị hủy).

Bảng thứ hai trong phần này là cab_ride_status bàn. Tại đây, một bản ghi được thêm vào cho mọi thay đổi liên quan đến một chuyến đi. Khi người điều phối nhập một chuyến xe mới vào hệ thống, họ sẽ thêm bản ghi vào cab_ride nhưng một bản ghi có liên quan cũng sẽ được tạo trong cab_ride_status bảng (cùng với trạng thái tương ứng). Sau mỗi thay đổi liên quan đến chuyến đi đó, một bản ghi nữa sẽ được thêm vào bảng này. Các thuộc tính là:

  • cab_ride_idstatus_id - Đây là các khóa ngoại có liên quan đến thuộc tính id trong ride bảng và thuộc tính id trong status bảng (mà chúng tôi sẽ đề cập bên dưới). Cả hai đều là bắt buộc.
  • status_time - Điều này lưu trữ thời gian thực tế khi bản ghi được chèn vào. Nó cũng là bắt buộc.
  • cc_agent_idshift_id - Đây là các tham chiếu đến nhân viên đã chèn cập nhật trạng thái. Nó có thể là một người điều phối hoặc một người lái xe. Có thể người điều phối sẽ chèn trạng thái ban đầu và trình điều khiển sẽ chèn tất cả các trạng thái sau.
  • status_details - Đây là một thuộc tính văn bản có thể được sử dụng để lưu trữ thông tin bổ sung. Ví dụ:điều phối viên có thể sử dụng thuộc tính này để ghi lại các hướng dẫn đặc biệt về chuyến đi.

Các bảng chưa được phân loại

Cuối cùng, hãy nhanh chóng xem qua các bảng chưa được phân loại của chúng tôi.

cc_agent bảng chứa danh sách các đại lý hoặc điều phối viên của trung tâm cuộc gọi có thể thêm các bản ghi mới trong cab_ridecab_ride_status bảng.

status từ điển, chúng tôi sẽ lưu trữ danh sách tất cả các trạng thái có thể có mà chúng tôi có thể chỉ định cho một chuyến đi. Một số giá trị bao gồm “chuyến đi mới” , “chuyến xe được giao cho tài xế” , “chuyến đi đã bắt đầu” , “chuyến đi đã kết thúc” hoặc “chuyến đi bị hủy” .

Payment_type là một bảng từ điển khác. Nội dung của nó được sử dụng để cập nhật payment_type_id trong cab_ride bàn. Các giá trị phổ biến là “tiền mặt” “thẻ tín dụng” .

Bạn sẽ cải thiện mô hình dữ liệu taxi như thế nào?

Mô hình cơ sở dữ liệu taxi / taxi được trình bày trong bài viết này chỉ tập trung vào các chức năng quan trọng nhất. Có rất nhiều cải tiến mà chúng tôi có thể thực hiện. Các tuyến đường chỉ là một trong những thứ mà tôi có thể nghĩ ra.

Trong tương lai, chúng ta có thể sẽ có taxi không người lái. Trong trường hợp đó, chúng tôi sẽ loại bỏ trình điều khiển khỏi mô hình và thay thế những thứ như sạc lại và thời gian sửa chữa.

Hãy bình luận và thêm ý kiến ​​của bạn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khóa chính SQL

  2. Cách xóa dữ liệu khỏi Elastisearch

  3. 7 công cụ sơ đồ hóa cơ sở dữ liệu miễn phí cho các thư mục dữ liệu bận rộn

  4. Kiểm tra tải mạng bằng iPerf

  5. MERGE:Cập nhật các bảng nguồn và mục tiêu nằm trên các máy chủ riêng biệt