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

Thiết kế lược đồ đơn giản để phân biệt dự báo nhu cầu

Nhận xét cuối cùng của bạn là chính xác những gì tôi muốn nói. Thật tuyệt khi thấy bạn đã hiểu!

Vì tôi đã bắt đầu làm điều đó, tôi đã hoàn thành một đoạn mã hoàn chỉnh. Sự khác biệt với những gì bạn đang nói là tách biệt những gì sẽ thay đổi với những gì sẽ không thay đổi (raw_material VS raw_material_hist ) chỉ sử dụng ngày trong tuần, là thứ hai và các ràng buộc kiểm tra khác nhau.

CREATE TABLE raw_material 
  ( 
     material_id     NUMBER PRIMARY KEY, 
     material_blabla VARCHAR2(20) 
  ); 

CREATE TABLE wip 
  ( 
     wip_id     NUMBER PRIMARY KEY, 
     parent_raw NUMBER REFERENCES raw_material(material_id), 
     wip_desc   VARCHAR2(20) 
  ); 

CREATE TABLE end_product 
  ( 
     end_product_id NUMBER PRIMARY KEY, 
     parent_wip     NUMBER REFERENCES wip(wip_id), 
     description    VARCHAR2(20) 
  ); 

CREATE TABLE rm_histo 
  ( 
     material_id NUMBER REFERENCES raw_material(material_id), 
     week_start  DATE CHECK (To_char(week_start, 'D')=1), 
     forecast    NUMBER(8) CHECK (forecast >0), 
     CONSTRAINT pk_rm_histo PRIMARY KEY (material_id, week_start) 
  ); 

CREATE TABLE wip_histo 
  ( 
     wip_id            NUMBER REFERENCES wip(wip_id), 
     week_start        DATE CHECK(To_char(week_start, 'D')=1), 
     wip_user_forecast NUMBER(8) CHECK (wip_user_forecast>0), 
     CONSTRAINT pk_wip_histo PRIMARY KEY (wip_id, week_start) 
  ); 

CREATE TABLE end_prod_histo 
  ( 
     end_product_id         NUMBER REFERENCES end_product(end_product_id), 
     week_start             DATE CHECK(To_char(week_start, 'D')=1), 
     end_prod_user_forecast NUMBER(8) CHECK (end_prod_user_forecast >0) 
  ); 

Và cuối cùng, bạn thực sự sử dụng một chế độ xem để xem những điều được dự báo hoặc một chế độ hiện thực hóa nếu bạn có rất nhiều dữ liệu. Bằng cách sử dụng chế độ xem, bạn không sao chép dữ liệu, vì vậy việc thay đổi / cập nhật sẽ an toàn và dễ dàng hơn.

Đối với trường hợp sử dụng 1 hoặc 2 của bạn, điều này không liên quan đến lược đồ cơ sở dữ liệu. Vào cuối ngày, nó sẽ chỉ cập nhật một số giá trị cho dự báo, logic của các trường hợp sử dụng 1 hoặc 2 có thể đi theo quy trình PL / SQL hoặc bất kỳ thứ gì bạn đang sử dụng cho giao diện.

Chỉnh sửa:Cũng từ nhận xét cuối cùng của bạn, bạn đã đề cập đến việc đặt dự báo theo cách thủ công VS được tính toán. Vì vậy, tôi đã thêm một cột như vậy, nhưng tín dụng sẽ thuộc về bạn

Chỉnh sửa bis:Đối với số nhóm, chỉ cần sử dụng mặt nạ thích hợp cho ngày, như IW hoặc WW . Hai thay đổi này là tuần đầu tiên của năm.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn tối đa (ngày) không hoạt động nếu các hàng có giá trị khác nhau, tôi chỉ muốn tìm nạp hàng có ngày cao nhất

  2. Cách cập nhật với tham gia bên trong trong Oracle

  3. Giới hạn ConnectionTimeout cho Cơ sở dữ liệu Oracle

  4. Thực thi DDL động trong thủ tục PL / SQL thông qua quyền vai trò xác định

  5. Oracle SQL:Cách sử dụng hơn 1000 mục bên trong mệnh đề IN