2013-07-15 44 views
9

Tôi hiện đang làm việc trên một dự án sẽ giúp chúng tôi kiểm soát khoảng không quảng cáo cũng như các giao dịch mua của mình để lắp ráp sản phẩm cuối cùng của mình.Mô hình cơ sở dữ liệu về hóa đơn

Chúng tôi đang trong giai đoạn lập mô hình cơ sở dữ liệu của chúng tôi và một trong các yêu cầu là tạo BOM (Bill of materials).

Tôi đã đọc this thread và tìm thấy một mô hình dữ liệu ví dụ cho BOM:

conceptual data modelphysical data model

enter image description here

nhưng tôi không chắc tôi hoàn toàn hiểu được.

Sản phẩm cuối cùng của chúng tôi bao gồm một vài cụm phụ, do đó mỗi cụm phụ là một hàng trong bảng product_hierarchy và sản phẩm cuối cùng cũng là một hàng trong bảng đó. Mỗi phụ lắp ráp được làm từ các bộ phận riêng biệt (nguyên tử) và mỗi bộ phận được xác định trong một bảng tpart (mỗi phần có trường sản xuất, số lượng đặt hàng tối thiểu và các trường cụ thể khác).

Khi tạo một BOM tất cả các phần riêng biệt cũng nên được bao gồm, vì vậy nó không hoàn toàn rõ ràng đối với tôi làm thế nào để mô hình cơ sở dữ liệu của chúng tôi:

  1. một phần riêng biệt là một hàng trong product_hierarchy đó sẽ không bao giờ là một của cha mẹ ' '(không cần dùng bảng nữa)
  2. mối quan hệ N: M giữa product_hierarchytpart: mỗi đơn vị có nhiều phần; mỗi phần có thể thuộc về một số đơn vị

Tôi đang nghiêng về phía phương án thứ hai, vì một phần cơ bản là một thực thể tổng khác nhau (có giá, một số nhà cung cấp có thể, ...) trong khi một thực thể assemblied không có bên ngoài (như trong: bên ngoài công ty của chúng tôi) tài sản.

Bất kỳ đầu vào nào được đánh giá cao! Cảm ơn!

+0

Suy nghĩ đầu tiên của tôi là có thể thiếu mức trừu tượng này. Ví dụ, trong phòng tắm, bạn có thể biết rằng bạn sẽ muốn cung cấp bồn tắm, chậu rửa và WC mà không nhất thiết phải xác định những đồ vật đó là gì - và cho phép khả năng chúng có thể thay đổi. – Strawberry

+0

Bạn đã biết RDBMS nào (Oracle, SQLServer, MySQL, v.v.) điều này sẽ được triển khai? (Có một vấn đề với dữ liệu kiểu BOM trong MySQL không phải là vấn đề với nhiều RDBMS khác.) –

+0

@MarkBannister Rất có thể MySQL, vấn đề đó có thể là gì? – user729103

Trả lời

18

Các mô hình liên kết bạn thất bại trong việc giải quyết một số đặc tính BOMs lớn thường có:

  • Bộ phận và phụ lắp ráp có thể được tái sử dụng. Ví dụ, nó là phổ biến cho cùng một loại bu lông được sử dụng trong nhiều hội đồng.
  • Có cần phải là Số lượng cụ thể của BOM. Ví dụ, điều quan trọng là phải biết rằng một hội đồng cần (nói) 50 bu lông, nhưng khác lắp ráp có thể chỉ cần 30 của cùng một loại bu lông.

Đây là một mô hình đơn giản nhằm giải quyết những mối quan tâm:

enter image description here

Bảng PHẦN hoặc là một lắp ráp đầu hoặc một tiểu lắp ráp hoặc một phần lá. Nó sử dụng một "số phần" được biết đến công khai để xác định các hàng của nó, mà thực ra không phải là một số và có thể chứa các ký tự không phải là số.

Bảng BOM mô hình mối quan hệ nhiều-nhiều của chính nó. Nó thực sự không khác với bất kỳ bảng giao nhau nào khác, ngoại trừ cả hai bảng "điểm cuối" thực sự là cùng một bảng. Bằng cách này, một phụ lắp ráp hoặc một phần có thể được tái sử dụng trong nhiều hội đồng phụ huynh. Ở đầu mô hình này, bạn có thể tự nhiên thêm những thứ như "vị trí vẽ" hoặc "đơn vị đo" (ví dụ: sơn có thể là một phần của BOM nhưng được đo bằng "kilôgam" thay vì "miếng").


Có nhiều điều bạn có thể muốn làm trong thực tế, nhưng nằm ngoài phạm vi của bài đăng StackOverflow đơn giản như thế này.

Ví dụ:

  • Làm thế nào để bạn xử lý thay đổi? Bạn có phiên bản một phần không? Bạn có phiên bản BOM không?
  • Các nhà cung cấp khác nhau có thể sử dụng các số phần khác nhau cho phần cơ bản giống nhau.
  • Bạn có thể muốn theo dõi "trang web" (kho hoặc nhà máy) nơi các bộ phận được lưu trữ hoặc lắp ráp/sản xuất. Một "cùng" hội đồng thậm chí có thể có BOM hơi khác nhau cho các trang web khác nhau.
  • Bạn có thể muốn phân biệt giữa các bộ phận "đã thực hiện" và "đã mua".
  • Bạn có quy trình làm việc vòng đời (phê duyệt/phát hành/lỗi thời) không?
  • Bạn có thể muốn lưu trữ thuộc tính do người dùng xác định. Các thuộc tính thường bao gồm những thứ như khối lượng, khối lượng và tài liệu, nhưng có thể có nhiều thứ khác không thể lường trước được.
  • Bạn có thể muốn kết nối các mô hình CAD vật lý với dữ liệu trong cơ sở dữ liệu.
  • Bạn có thể không cho phép một số người dùng thực hiện các thay đổi nhất định cho cơ sở dữ liệu (ví dụ: bộ phận mua sắm không thể thay đổi cấu trúc lắp ráp, ít nhất là không có giám sát).
  • Vv, v.v ...

Đây là một số lý do khiến hệ thống PDM thực có xu hướng phức tạp.Nếu bạn thực sự cần tất cả chức năng đó, bạn có lẽ nên xem xét sử dụng một sản phẩm thương mại thay vì cố gắng tự thực hiện lại nó ...

+0

Cảm ơn câu trả lời của bạn. Liên quan: 'Các mô hình mà bạn liên kết không giải quyết được một số tính chất chính mà BOM thường có', tôi nghĩ như vậy và nảy ra ý tưởng tương tự về bảng 'BOM', nhưng tôi không thực sự chắc chắn đó là cách để đi . Tôi không thể nhìn thấy ngay lập tức tuy nhiên lợi thế của việc sử dụng 'phần' là cả hai lắp ráp hàng đầu, lắp ráp phụ và lá. Chúng tôi thực sự đã có 'một phần số', nhưng không phải như vậy cho các bộ phận lắp ráp của chúng tôi. Đối với nhận xét 'phụ trội' của bạn: Một số trong số đó thực sự là cần thiết (như đặc quyền của người dùng) và chúng tôi cũng đang xem xét sử dụng giải pháp hiện có (nguồn mở hoặc không). – user729103

+0

@ user729103 Vâng, bạn cần một bảng để làm cho PART_NO duy nhất - bạn không thể (dễ dàng) làm cho PART_NO duy nhất trên nhiều bảng. Tuy nhiên, bạn có thể "kế thừa" các lớp con "cụ thể" từ bảng PART nếu bạn muốn ... –

+0

@BrankoDimitrijevic Cấu trúc BOM ở đây hoạt động cho các hội đồng và lá, nhưng tôi không thấy nó hoạt động như thế nào cho đầu -hội,, tổ hợp. Việc lắp ráp hàng đầu không có PARENT_PART_NO. Chúng tôi không thể đặt trường đó thành NULL vì nó nằm trong PK. Bạn có một cách đề xuất để giải quyết điều đó? – Ben

1

Có vẻ như bạn có thể có hai loại sản phẩm. Một là phần 'nguyên tử' và phần còn lại là sản phẩm cuối cùng 'hợp chất'. Tôi sẽ lưu trữ chúng trong hai bảng riêng biệt, vì cả hai đều cần các thông tin khác nhau.

Bảng CompoundProduct cũng sẽ cần một bảng con liên kết phần này với sản phẩm cuối cùng.

Nếu bạn thích, bạn vẫn có thể có bảng sản phẩm 'trừu tượng' chứa tất cả các sản phẩm: các bộ phận cũng như các sản phẩm cuối cùng. Trong bảng này, bạn có thể lưu trữ mã và tên và thuận tiện để có một bảng sản phẩm có thể được mua và hiển thị trên đơn đặt hàng hoặc hóa đơn. Cả bảng Part như bảng CompoundProduct có thể có một id sản phẩm là khóa ngoài cho bảng sản phẩm trừu tượng, nhưng cũng là duy nhất trong Part và CompoundProduct.

Vì vậy, nói chung, lược đồ cơ sở dữ liệu này là mạnh mẽ và linh hoạt, nhưng tôi nghĩ nó chưa đủ, hoặc có thể quá linh hoạt cho bạn muốn.

Các vấn đề liên quan