Tôi đang thiết kế một cơ sở dữ liệu cho nhóm bán hàng của chúng tôi để sử dụng như một công cụ báo giá công việc nhanh chóng. Tôi muốn một số thông tin phản hồi về một khía cạnh cụ thể của thiết kế.
Một trích dẫn về cơ bản được xây dựng bằng cách chọn một danh sách các 'hội đồng' được xác định trước với mỗi mức giá thỏa thuận. Một cái nhìn đơn giản về hình thức chính trông như thế này:
+------------ --- ---+
| Assembly options |
+------------+------------+----------+------------+---+---+---+ --- +--+
| assembly ▼ | unit cost | quantity | total cost | 1 | 2 | 3 | |50|
+------------+------------+----------+------------+---+---+---+ --- +--+
| VSD55 | £10'000 | 2 | £25'500 | 1 | 1 | | | |
| RDOL2.2 | £2'000 | 1 | £1'500 | | 1 | | | |
| DOL5.0 | £1'000 | 1 | £1'200 | | | 1 | | |
+------------+------------+----------+------------+---+---+---+ --- +--+
Người dùng chọn một cụm được xác định trước, nhập số lượng và chọn bất kỳ 'tùy chọn' bắt buộc. Mỗi lắp ráp có khả năng có tới 50 tùy chọn có sẵn. Một tùy chọn cũng là một hội đồng được xác định trước (lắp ráp phụ) với giá riêng của nó. 'Tổng chi phí' cho mỗi dòng được tính bằng (chi phí lắp ráp chính * số lượng) + chi phí cho bất kỳ tùy chọn nào.
Khi người dùng di chuyển con trỏ của họ vào hộp tùy chọn, tên và giá của tùy chọn đó được biết đến với họ.
Bây giờ đây là nơi nó trở nên phức tạp. Mỗi hội đồng có danh sách tùy chọn có sẵn của riêng mình. tức là tùy chọn 1 cho 'VSD55' đại diện cho một tổ hợp con khác với tùy chọn 1 cho DOL5.0.
Theo như các hội đồng ở đây là các bảng được đơn giản hóa mà tôi đang sử dụng:
+-----------------+ +------------------------+ +-----------------------------+
| assembly | | assembly_option | | assembly_option_link |
+-----------------+ +------------------------+ +-----------------------------+
| assembly_id (PK)| | assembly_option_id (PK)| | assembly_option_link_id (PK)|
| assembly_name | | assembly_option_name | | assembly_id (FK) |
| unit_cost | | option_number | | assembly_option_id (FK) |
+-----------------+ | unit_cost | +-----------------------------+
+------------------------+
Bảng 'assembly_option_link' về cơ bản xác định các tùy chọn có sẵn cho mỗi cụm.
Bây giờ cho các bảng 'trích dẫn':
+-----------------+ +------------------------+
| quote | | quote_assembly |
+-----------------+ +------------------------+
| quote_id (PK) | | quote_assembly_id (PK) |
| quote_name | | assembly_id (FK) |
+-----------------+ | quantity |
+------------------------+
Bây giờ phần khó khăn là làm thế nào để lưu trữ bất kỳ tùy chọn đã chọn. Tôi có nên mở rộng bảng 'quote_assugging' với tất cả 50 trường tùy chọn mặc dù điều này phá vỡ quy tắc chuẩn hóa. Một hội đồng sẽ không bao giờ được chọn với tất cả 50 tùy chọn nên điều này có vẻ rất không hiệu quả. Về mặt tích cực, giải pháp này cho phép biểu mẫu nhập của người dùng ánh xạ trực tiếp vào bảng giúp mã hóa dễ dàng.
Giải pháp 'bình thường hóa' tôi nghĩ sẽ tạo ra một bảng khác như thế này:
+------------------------------+
| quote_assembly_option |
+------------------------------+
| quote_assembly_option_id (PK)|
| quote_assembly_id (FK) |
| assembly_option_id (FK) |
| quantity |
+------------------------------+
Giải pháp này có nghĩa là chỉ có các tùy chọn được chọn được lưu trữ. Ngoài ra, thay vì lưu trữ tùy chọn, tôi có thể lưu trữ 'assembly_option_id' thực tế. Điều này sau đó làm cho việc tính toán tổng chi phí báo giá đơn giản hơn vì tôi không cần phải chuyển đổi giữa 'tùy chọn_number' và 'assembly_option_id' để tra cứu chi phí tùy chọn lắp ráp. Tuy nhiên, nhược điểm lớn của giải pháp này là nó không phù hợp với biểu mẫu nhập của người dùng. Tôi nghĩ rằng tôi sẽ cần phải áp dụng một số mã hóa ưa thích để giao diện biểu mẫu với các bảng.
Bất cứ ai có thể cung cấp bất kỳ lời khuyên thiết kế ở đây xin vui lòng? Tôi hy vọng tôi đã giải thích bản thân mình đủ tốt.
THÔNG TIN THÊM
Đây cũng là một báo cáo báo giá chi tiết mở rộng mọi tùy chọn đã chọn dưới dạng các mục hàng riêng biệt trong phần chính. Ví dụ:
+---------------------------------+------------+----------+------------+
| assembly | unit cost | quantity | total cost |
+---------------------------------+------------+----------+------------+
| VSD55 | £10'000 | 2 | £20'000 |
| - Seal leak protection | £ 5'000 | 1 | £ 5'000 | <-option 1
| - Motor over temp protection | £ 500 | 1 | £ 500 | <-option 2
+---------------------------------+------------+----------+------------+
| | | | £25'500 |
+---------------------------------+------------+----------+------------+