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

Thiết kế cơ sở dữ liệu quản lý chứng khoán

Tôi cũng có nhu cầu tương tự và đây là cách tôi giải quyết vấn đề di chuyển cổ phiếu của bạn (vấn đề này cũng trở thành vấn đề của tôi).

Để mô hình hóa chuyển động cổ phiếu (+/-), tôi có supplyingorder của tôi những cái bàn. Việc cung cấp đóng vai trò là + cổ phiếu của tôi và đơn đặt hàng của tôi - nguyên liệu của tôi.

Nếu chúng ta dừng lại ở điều này, chúng ta có thể tính toán kho thực tế của chúng ta sẽ được phiên âm thành truy vấn SQL này:

SELECT
    id,
    name,
    sup.length - ord.length AS 'stock'
FROM
    product
# Computes the number of items arrived
INNER JOIN (
    SELECT
        productId,
        SUM(quantity) AS 'length'
    FROM
        supplying
    WHERE
        arrived IS TRUE
    GROUP BY
        productId
) AS sup ON sup.productId = product.id
# Computes the number of order
INNER JOIN (
    SELECT
        productId,
        SUM(quantity) AS 'length'
    FROM
        product_order
    GROUP BY
        productId
) AS ord ON ord.productId = product.id

Điều này sẽ cung cấp một cái gì đó như:

id  name            stock
=========================
 1  ASUS Vivobook       3
 2  HP Spectre         10
 3  ASUS Zenbook        0
    ...

Mặc dù điều này có thể giúp bạn tiết kiệm một bảng, nhưng bạn sẽ không thể mở rộng quy mô với nó, do đó thực tế là hầu hết các mô hình hóa (imho) sử dụng một stock trung gian , chủ yếu là cho các mối quan tâm về hiệu suất.

Một trong những nhược điểm là dữ liệu trùng lặp, vì bạn sẽ cần phải chạy lại truy vấn ở trên để cập nhật kho hàng của mình (xem phần updatedAt cột).

Mặt tốt là hiệu suất của khách hàng. Bạn sẽ gửi phản hồi nhanh hơn thông qua API của mình.

Tôi nghĩ rằng một nhược điểm khác có thể là nếu bạn đang quản lý cửa hàng lưu lượng truy cập cao. Bạn có thể tưởng tượng việc tạo một bảng khác lưu trữ thực tế rằng một kho hàng đang được tính toán lại và khiến người dùng đợi cho đến khi tính toán lại hoàn tất (yêu cầu đẩy hoặc bỏ phiếu dài) để kiểm tra xem mọi mặt hàng của họ vẫn còn hàng (kho> =nhu cầu của người dùng). Nhưng đó là một thỏa thuận khác ...

Dù sao, ngay cả khi truy vấn tính toán lại kho đang sử dụng truy vấn con ẩn danh, nó thực sự phải đủ nhanh trong hầu hết các cửa hàng tương đối trung bình.

Lưu ý

Bạn thấy trong product_order , Tôi đã sao chép giá và thùng. Điều này là vì lý do đáng tin cậy:để cố định giá tại thời điểm mua và có thể tính toán lại tổng số với nhiều số thập phân (mà không bị mất xu).

Hy vọng nó sẽ giúp ai đó đi ngang qua.

Chỉnh sửa

Trong thực tế, tôi sử dụng nó với Laravel và tôi sử dụng lệnh bảng điều khiển , sẽ tính toán kho sản phẩm của tôi theo lô (tôi cũng sử dụng một tham số tùy chọn để chỉ tính toán cho một id sản phẩm nhất định), vì vậy kho hàng của tôi luôn chính xác (liên quan đến truy vấn ở trên) và tôi không bao giờ cập nhật bảng kho theo cách thủ công.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiểu các giao dịch mysql pdo

  2. Chuyển giá trị biến từ JS sang PHP

  3. Wordpress không thể kết nối với máy chủ mysql

  4. Kiểu dữ liệu mảng DC2Type trong mysql là gì

  5. Đang thử cập nhật bản ghi với PDO