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

Làm thế nào để quản lý các đơn vị đo lường trong một ứng dụng web PHP?

Lời giải thích của vấn đề hơi mơ hồ và tôi không chắc về phạm vi của ứng dụng, nhưng từ quan điểm kiến ​​trúc hệ thống, nếu bạn đang sử dụng khung MVC, bạn có thể muốn giữ tất cả các đơn vị cơ sở dữ liệu của mình giống nhau và tạo Bộ điều khiển chuyển đổi đơn vị. Bộ điều khiển này sẽ lấy đơn vị tiêu chuẩn làm đầu vào và đầu ra một giá trị dựa trên đơn vị mong muốn. Một cờ sẽ được lưu trong hồ sơ người dùng / khách hàng của bạn trong cơ sở dữ liệu để cho bạn biết họ thích Đơn vị nào để bạn không bị mất thông tin này giữa các lần đăng nhập. Chuyển giá trị ở định dạng đơn vị tiêu chuẩn (ví dụ, mét) và cờ của đơn vị mong muốn (giả sử, 'FEET') vào Bộ điều khiển của bạn và để nó thực hiện chuyển đổi và trả về một giá trị.

Tôi sẽ không cố gắng giữ các loại đơn vị khác nhau trong cơ sở dữ liệu vì bạn có thể sẽ phải viết tất cả các loại mã để cố gắng quản lý các ngoại lệ và bảo trì (ví dụ:cập nhật tất cả các giá trị khi khách hàng thay đổi đơn vị của họ). Giữ một đơn vị tiêu chuẩn trong cơ sở dữ liệu và thực hiện chuyển đổi thông qua một lớp php tương tự như cách Zend Framework được Robert đề cập. Googling "chuyển đổi đơn vị php" sẽ hiển thị một số lớp có thể phù hợp với nhu cầu của bạn.

CẬP NHẬT:

Vẫn không chắc tôi đang nhìn thấy toàn bộ vấn đề, nhưng tôi sẽ cố gắng trả lời tốt nhất khi tôi hiểu. Như trước đây, tốt nhất là giữ 1 hệ thống đơn vị trong cơ sở dữ liệu, chẳng hạn như số liệu. Measure_type trong user_pref cho biết khách hàng muốn gì, nói "IMPERIAL". Tùy thuộc vào mức độ trải rộng cơ sở dữ liệu của bạn, bạn có thể chọn một trong hai giải pháp để giữ các giá trị:

  1. Đối với các mục trong DB của bạn, bạn có thể có các thuộc tính (cột) khác nhau, như trọng lượng, chiều cao, khối lượng, v.v.

  2. Bạn có thể có một bảng Mục chứa các mục. Sau đó, bạn có một bảng Thuộc tính chứa các thuộc tính. Bảng Thuộc tính có 4 cột:property_id (khóa chính), thuộc tính (HEIGHT, WIDTH, LENGTH, WEIGHT), property_type (SIZE, MASS, VOLUME, AWESOMENESS) và giá trị. Sau đó, bạn có một bảng Property_Lookup có 2 cột:item_id, property_id và một phép nối giữa 3 bảng này sẽ cung cấp cho bạn tất cả các giá trị và loại đơn vị của mỗi thuộc tính thuộc một Mục. Trong lược đồ này, tôi sẽ vẫn giữ tất cả các mục nhập trong cột 'giá trị' trong một hệ thống đơn vị duy nhất (trong số liệu ví dụ này). Xem liên kết này để biết thêm về mối quan hệ nhiều-nhiều ( http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php ).

Mô hình của bạn sẽ truy xuất dữ liệu và đóng gói các thuộc tính này trong hệ thống Đơn vị {(METRIC *, IMPERIAL, BOTH); loại (KÍCH THƯỚC, MASS, VOLUME); value} mini-Model. Chuyển nó cho Bộ điều khiển của bạn. Khi kết xuất Chế độ xem của bạn sẽ mong đợi một giá trị đơn vị dựa trên những gì khách hàng muốn, vì vậy khi Bộ điều khiển của bạn đang tập hợp dữ liệu cho Chế độ xem của bạn, nó sẽ gửi các đối tượng Đơn vị thông qua Thư viện chuyển đổi đơn vị. Thư viện UnitConversion sẽ kiểm tra Mô hình người dùng cho hệ thống ưa thích của khách hàng và 'hệ thống' trong mô hình Đơn vị và thực hiện chuyển đổi cần thiết (vì Thư viện có thể giả định hệ thống trong mô hình Đơn vị là số liệu khi đến từ cơ sở dữ liệu, nó thực hiện điều này bước dễ dàng hơn một chút). Sau đó, nó sẽ xuất ra một số theo đúng đơn vị (đơn vị nếu chọn CẢ HAI), số này có thể được chuyển cho Chế độ xem.

Một từ nhanh ở trên là luôn luôn khi xử lý kiến ​​trúc hệ thống, không có giải pháp 'chính xác' cho một vấn đề. Đây là cách tôi sắp xếp mọi thứ dựa trên thông tin được cung cấp, nhưng bạn có thể sẽ cần phải điều chỉnh nó một chút để làm cho nó hoàn toàn phù hợp với những gì bạn đang làm việc. Điều đó nói rằng, tôi sẽ chỉnh sửa phần trên để hoạt động trong hệ thống của bạn, chứ không phải chỉnh sửa hệ thống của bạn để phần trên hoạt động! Hy vọng điều này cung cấp cho bạn một số ý tưởng hay.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL chuyển đổi YEARWEEK thành ngày

  2. Cách xuất kết quả của một truy vấn bằng MySQL Workbench

  3. Lỗi khi chạy mysql_install_db:không thể tìm thấy ./bin/my_print_defaults

  4. Cách trả lại id trên Phụ trang với mybatis trong mysql với chú thích

  5. MYSQL Làm tròn ngày giờ thành 15 phút