Database-Design

設計一個可以跟踪庫存變動的數據庫

  • October 2, 2018

我在一家製造公司工作,該公司向安裝了控制單元的客戶銷售機器。在將所有機器出售給客戶後,我們需要跟踪它們的位置。我們需要跟踪所有控制單元,無論它們是分配給機器的,它們是作為備件發送給客戶的,它們是返回給供應商進行維修還是在庫存中。我正在嘗試設置表格來記錄可以分配給客戶的機器位置的歷史記錄,但隨後可以將同一台機器移動/重新分配給另一個客戶。機器有一個序列號。還需要記錄可以分配給機器的控制單元位置的歷史記錄,然後可以將其移動/重新分配給另一台機器。控制單元也可以作為備用單元發送給客戶,以防發生故障,也可以發送給製造商進行維修。在控制單元從製造商那裡回來後,它會被放回庫存中,在某個階段它可以重新分配給另一台機器。控制單元也有一個序列號。

我附上了我認為可能是合適解決方案的 ER 圖。ERD 圖顯示了 TBL_ControlUnitLocations 表中 MachineID、CustomerID 和 ManufacturerID 的連結。我看到的問題是,當您選擇所需的連結時,其他兩個需要設為 NULL。當您查看特定控制單元的歷史記錄時,您最終會看到兩個欄位始終為空白。

一種選擇是不在主窗體上顯示 MachineID、CustomerID 和 ManufacturerID 欄位,而只顯示 Location 欄位。是否可以彈出另一個表單,讓您選擇要連結到的 MachineID、CustomerID 和 ManufacturerID 欄位中的哪一個,然後將連結分配給 Location 欄位,然後關閉彈出表單。所以你看到的只是位置欄位。

您將如何實現主窗體和彈出窗體來記錄關聯? 在此處輸入圖像描述

您正在尋找的是一個視圖。這是更多描述的連結。

https://msdn.microsoft.com/en-us/library/office/ff836312.aspx

這就是它的樣子,您可以圍繞視圖創建一個表單。

CREATE VIEW vw_cust_mach_loc
AS
SELECT cust.CustomerName,
  cust.CustomerAddress,
  cust.SuburbTownCity,
  cust.State,
  cust.PostCode,
  cust.Country,
  cust.FirstName,
  cust.SurnameName,
  cust.PhoneNumber,
  cust.MobileNumber,
  cust.EmailAddress,
  cust.Notes,
  m_lo.CustomerReference,
  m_lo.TimeStamp,
  m_lo.StatusID,
  m_lo.OriginalCustomer,
  m_lo.Notes,
  mach.MachineSerialNumber,
  mach.MachineModeID,
  mach.MachineOtherFields,
  mach.Notes
FROM TBL_Customers cust
  INNER JOIN TBL_MachineLocations m_lo
      ON cust.CustomerID = m_lo.CurrentCustomerID
  INNER JOIN TBL_Machines mach
      ON m_lo.MachineID = mach.MachineID;

CREATE VIEW vw_cust_mach_sup_ctrl_units
AS
SELECT cust.CustomerName,
      cust.CustomerAddress,
      cust.SuburbTownCity,
      cust.State,
      cust.PostCode,
      cust.Country,
      cust.FirstName,
      cust.SurnameName,
      cust.PhoneNumber,
      cust.MobileNumber,
      cust.EmailAddress,
      cust.Notes,
      mach.MachineSerialNumber,
      mach.MachineModeID,
      mach.MachineOtherFields,
      mach.Notes,
      culs.Location,
      culs.Reference,
      culs.TimeStamp,
      culs.OriginalMachine,
      culs.OtherLocationID,
      culs.StatusID,
      culs.Notes,
      supl.SupplierName,
      supl.ContactFirstName,
      supl.ContactLastName,
      supl.ContactTitle,
      supl.Address,
      supl.City,
      supl.Region,
      supl.PostalCode,
      supl.Country,
      supl.PhoneNumber,
      supl.MobileNumber,
      supl.Fax,
      supl.[E-mail Address],
      supl.HomePage,
      supl.Notes,
      cuts.ControlUnitSerielNumber,
      cuts.ControlUnitBarCodeID,
      cuts.ControlUnitStatusID,
      cuts.TimeStamp,
      cuts.Notes
FROM TBL_Customers cust
    INNER JOIN TBL_ControlUnitLocations culs
        ON cust.CustomersID = culs.CustomerID
    INNER JOIN TBL_Machines mach
        ON culs.MachineID = mach.MachineID
    INNER JOIN TBL_Suppliers supl
        ON culs.ManufactureID = supl.SupplierID
    INNER JOIN TBL_ControlUnits cuts
        ON culs.ControlUnitID = cuts.ControlUnitIDMachineID;

您可以像表格一樣從中進行選擇。

SELECT * FROM vw_cust_mach_loc;
SELECT * FROM vw_cust_mach_sup_ctrl_units;

使用特定列代替的範例*

SELECT
   Location,
   Reference,
   TimeStamp,
   OriginalMachine,
   OtherLocationID,
   StatusID,
   Notes,
   SupplierName,
   ContactFirstName,
   ContactLastName,
   ContactTitle,
   Address,
   City,
   Region,
   PostalCode,
   Country,
   PhoneNumber,
   MobileNumber,
   Fax,
   [E-mail Address],
   HomePage,
   Notes,
   ControlUnitSerielNumber,
   ControlUnitBarCodeID,
   ControlUnitStatusID,
   TimeStamp,
   Notes
FROM vw_cust_mach_sup_ctrl_units

引用自:https://dba.stackexchange.com/questions/213848