Rất tốt — với mô hình bạn đã thiết kế, ta có thể đánh giá tính logic khi nhập 4 loại sản phẩm như sau:
✅ 1. Sản phẩm thông thường
(Sản phẩm không có biến thể, không có lô)
✅ Hợp lý khi:
-
ProductId
có trong [Products]
-
VariantId
= '00000000-0000-0000-0000-000000000000'
(mặc định)
-
LotId
= '00000000-0000-0000-0000-000000000000'
(mặc định)
-
StockPerStore
và TransactionsStock
xử lý đúng bộ 4 khóa
👉 Không cần nhập ProductVariants
hay ProductLots
✅ 2. Sản phẩm có biến thể
(Ví dụ: quần áo có size/màu)
✅ Hợp lý khi:
-
Products
: là sản phẩm cha
-
ProductVariants
: chứa từng biến thể (size M, màu đỏ...)
-
StockPerStore
: tồn theo ProductId + VariantId
, LotId
mặc định
-
TransactionsStock
: ghi nhận theo biến thể
⚠ Logic cần đảm bảo:
-
VariantId
bắt buộc có, liên kết đúng với ProductId
-
LotId
vẫn để mặc định '00000000-0000-0000-0000-000000000000'
✅ 3. Sản phẩm theo lô
(Thuốc, thực phẩm cần hạn dùng, quản lý theo lô nhập)
✅ Hợp lý khi:
-
Products
: như bình thường
-
ProductVariants
: không cần dùng (nếu không có biến thể)
-
LotId
: là real LotId
, liên kết đến ProductLots
(chứa ExpiryDate
)
-
VariantId
: mặc định '0000...'
-
StockPerStore
: tồn kho theo từng LotId
-
TransactionsStock
: ghi nhận đúng LotId
⚠ Logic cần đảm bảo:
✅ 4. Sản phẩm có cả biến thể và lô
✅ Hợp lý khi:
-
Products
: sản phẩm cha
-
ProductVariants
: định nghĩa từng biến thể
-
ProductLots
: định nghĩa các lô theo VariantId
-
StockPerStore
: tồn theo bộ khóa:
-
TransactionsStock
: mỗi giao dịch phải ghi đủ 3 trường: ProductId
, VariantId
, LotId
⚠ Logic cần đảm bảo:
⚠️ Tóm tắt điều kiện kiểm tra tính logic khi nhập hàng
Loại SP |
ProductId |
VariantId |
LotId |
Ghi chú logic bắt buộc |
Sản phẩm thông thường |
✅ |
'0000-0000…' |
'0000-0000…' |
Không dùng bảng Variants , Lots |
Sản phẩm có biến thể |
✅ |
✅ Variants.VariantId |
'0000-0000…' |
Có dòng VariantId đúng với ProductId |
Sản phẩm có lô |
✅ |
'0000-0000…' |
✅ Lots.LotId |
LotId phải thuộc VariantId mặc định |
Sản phẩm có biến thể và lô |
✅ |
✅ Variants.VariantId |
✅ Lots.LotId (của biến thể đó) |
Phải đúng cả VariantId và LotId liên kết |
🧪 Bạn nên kiểm tra các lỗi logic thường gặp:
-
✅ LotId
không tồn tại trong ProductLots
→ ❌ lỗi logic
-
✅ VariantId
không thuộc ProductId
→ ❌ sai biến thể
-
✅ StockPerStore
bị trùng dòng với tổ hợp (StoreId, ProductId, VariantId, LotId)
→ ❌ vi phạm UNIQUE