1. 程式人生 > >一個進銷存資料庫設計的例子

一個進銷存資料庫設計的例子

CREATE TABLE user(
  User_Id varchar(6),
  User_Pwd varchar(8) NULL,
  Again_Pwd varchar(8) NULL,
  Bel_Group varchar(3) NULL,
  Div_Type varchar(1) NULL,
  User_Auth varchar(1) NULL,
  Auth_Type varchar(1) NULL,
  User_Status varchar(1) NULL,
  Create_User varchar(6) NULL,
  Create_Date varchar(7) NULL,
  Create_Time varchar(6) NULL,
  Appr_User varchar(6) NULL,
  Appr_Date varchar(7) NULL,
  Appr_Time varchar(6) NULL,
  Pwd_Date varchar(7) NULL,
  Err_Count float NULL,
  Use_eJCIC varchar(1) NULL
)
CREATE TABLE Supplier  /*供應商表*/
(
  Supplier_ID     int     IDENTITY(1,1)     NOT NULL, /* 供應商編號 ,主鍵 */
  Name            varchar(250)              NOT NULL, /* 供應商名稱 */
  Address         varchar(250)              NOT NULL, /* 地址 */
  Phone           varchar(25)               NULL,     /* 電話 */
  Fax             varchar(25)               NULL,     /* 傳真 */
  PostalCode      varchar(10)               NULL,     /* 郵編 */
  ConstactPerson  varchar(20)               NULL      /* 聯絡人 */
 )

CREATE TABLE Customer   /* 客戶表*/
(
  Customer_ID     int    IDENTITY(1,1)      NOT NULL, /* 客戶編號,主鍵*/
  Name            varchar(250)              NOT NULL, /* 客戶名稱 */
  Address         varchar(250)              NOT NULL, /* 地址 */
  Phone           varchar(25)               NULL,     /* 電話 */
  Fax             varchar(25)               NULL,     /* 傳真 */
  PostalCode      varchar(10)               NULL,     /* 郵編 */
  ConstactPerson  varchar(20)               NULL      /* 聯絡人 */
 )

CREATE TABLE Dept      /* 部門表 */
(
  Dept_ID        int   IDENTITY(1,1)        NOT NULL, /* 部門編號,主鍵 */
  Name           varchar(30)                NOT NULL, /* 名稱 */
  Remark           varchar(250)               NOT NULL/* 描述,備註 */
)

CREATE TABLE Dept_Supplier /* 部門--供應商表*/
(
  Dept_ID       int                         NOT NULL,  /* 部門編號,主鍵 ,  外來鍵( 參照 DEPT 表  )*/
  Supplier_ID   int                         NOT NULL   /* 供應商編號 ,主鍵,外來鍵( 參照 SUPPLIER 表) */
)

CREATE TABLE Dept_Customer /* 部門--客戶表*/
(
  Dept_ID       int                         NOT NULL, /* 部門編號,主鍵 ,  外來鍵( 參照 DEPT 表  )*/
  Customer_ID   int                         NOT NULL  /* 客戶編號,主鍵,  外來鍵( 參照 SUPPLIER 表) */
)

CREATE TABLE StoreHouse   /* 倉庫表 */
(
  StoreHouse_ID   int IDENTITY(1,1)         NOT NULL,  /* 倉庫編號,主鍵 */
  Address         varchar(250)              NOT NULL,  /* 地址 */
  Phone           varchar(25)               NULL,      /* 電話 */
  Employee_ID     INT                       NOT NULL,  /* 倉庫保管 ,外來鍵 ( 參照 EMPLOYEE 表 ) */
  CreateDate      datetime                  NULL       /* 倉庫成立時間 */
)

CREATE TABLE ProductClass  /* 商品總分類表 */
(
  ProductClass_ID  int IDENTITY(1,1)        NOT NULL,  /* 商品總分類編號, 主鍵 */
  Name             varchar(30)              NOT NULL,  /* 商品分類名稱 */
  Employee_ID      INT                      NOT NULL,  /* 建分類人 ,外來鍵 ( 參照 EMPLOYEE 表 )*/
  CreateDate       datetime                 NULL,      /* 建分類時間 */
  Remark             varchar(250)             NULL,    /* 描述,備註 */
)

CREATE TABLE ProductList  /* 商品細分類表 */
(
  ProductClass_ID  INT                      NOT NULL, /* 商品總分類編號, 外來鍵 ( 參照PRODUCTCLASS 表 ) */
  ProductList_ID   int IDENTITY(1,1)        NOT NULL, /* 商品細分類編號,主鍵 */
  Name             varchar(30)              NOT NULL, /* 商品名稱 */
  Employee_ID      INT                      NOT NULL, /* 建分類人,外來鍵 ( 參照 EMPLOYEE 表 )*/
  CreateDate       datetime                 NULL,     /* 建分類時間 */
  Remark             varchar(250)             NULL,   /* 描述 ,備註 */
 )

CREATE TABLE ProductSpec  /* 商品規格表 */
(
  ProductSpec_ID   INT IDENTITY(1,1)        NOT NULL, /* 商品規格編號,主鍵 */
  Name             varchar(30)              NOT NULL, /* 商品規格名稱 */
  Employee_ID      INT                      NOT NULL, /* 操作員 ,外來鍵 ( 參照 EMPLOYEE 表 )*/
  CreateDate       datetime                 NULL,     /* 建立時間 */
  Remark             varchar(250)             NULL    /* 描述,備註 */
)
CREATE TABLE ProductUnit /* 商品計量單位表 */
(
  ProductUnit_ID   INT IDENTITY(1,1)        NOT NULL, /* 計量單位編號 ,主鍵 */
  Name             varchar(30)              NOT NULL, /* 計量單位名稱 */
  Employee_ID      INT                      NOT NULL, /* 操作員 ,外來鍵 ( 參照 EMPLOYEE 表 )*/
  CreateDate       datetime                 NULL,     /* 建立時間 */
  Remark             varchar(250)             NULL    /* 描述,備註 */
)
 
CREATE TABLE Product    /* 商品目錄表 */
(
  ProductList_ID   int                      NOT NULL,  /* 商品細分類編號, 外來鍵 ( 參照 PRODUCTLIST 表 ) */
  Product_ID       INT IDENTITY(1,1)        NOT NULL,  /* 商品名稱編號, 主鍵 */
  Name             varchar(30)              NOT NULL,  /* 商品名稱 */
  ProductSpec_ID   INT                      NOT NULL,  /* 商品規格, 外來鍵 ( 參照 PRODUCTSPEC 表 ) */
  ProductUnit_ID   INT                      NOT NULL,  /* 計量單位, 外來鍵 ( 參照 PRODUCTUNIT 表 ) */
  Price            MONEY                    NULL,      /* 參考價格 */
  Employee_ID      INT                      NOT NULL,  /* 操作員,   外來鍵 ( 參照 EMPLOYEE 表 )*/
  CreateDate       datetime                 NULL,      /* 建立時間 */
  Remark             varchar(250)             NULL     /* 描述,備註 */
)

CREATE TABLE Product_Supplier  /* 商品--供應商表 */
(
  Product_ID       INT                      NOT NULL,   /* 商品名稱編號,主鍵 , 外來鍵( 參照 PRODUCT 表  )*/
  Supplier_ID      INT                      NOT NULL    /* 供應商編號 , 主鍵,  外來鍵( 參照 SUPPLIER 表) */
)

CREATE TABLE Employee  /* 員工表 */
(
  Employee_ID      INT IDENTITY(1,1)        NOT NULL,  /* 員工編號 */
  Dept_ID          INT                      NOT NULL,  /* 所屬部門編號 */
  Name             varchar(30)              NOT NULL,  /* 姓名 */
  Duty             varchar(20)              NOT NULL,  /* 職務 */
  Gender           varchar(6)               NOT NULL,  /* 性別 */
  BirthDate        datetime                 NOT NULL,  /* 出生日期 */
  HireDate         datetime                 NULL,      /* 合同簽訂 日期 */
  MatureDate       datetime                 NULL,      /* 合同到期日 */
  IdentityCard     varchar(20)              NULL,      /* 身份證號 */
  Address          varchar(250)             NULL,      /* 住址 */
  Phone            varchar(25)              NULL,      /* 電話 */
  Email            varchar(30)              NULL       /* E_MAIL */
)

/*-///////////////////////////////////////////////////////////////////////////////////////-*/

CREATE TABLE BuyOrder    /* 進貨合同 */
(
  BuyOrder_ID     INT IDENTITY(1,1)        NOT NULL, /* 進貨合同編號 , 主鍵 */
  WriteDate       datetime                 NOT NULL, /* 合同簽訂日期  */
  InsureDate      datetime                 NOT NULL, /* 合同生效日期  */
  EndDate         datetime                 NOT NULL, /* 合同到期日期  */
  Dept_ID         INT                      NOT NULL, /* 簽訂部門, 外來鍵 ( 參照 DEPT 表 ) */
  Supplier_ID     INT                      NOT NULL, /* 供應商,   外來鍵 ( 參照 SUPPLIER 表 ) */
  Employee_ID     INT                      NOT NULL  /* 合同主要負責人, 外來鍵 ( 參照 EMPLOYEE 表) */
)
CREATE TABLE BuyOrder_Detail  /* 進貨合同明細表 */
(
  BuyOrder_ID     INT                      NOT NULL,  /* 進貨合同編號,主鍵, 外來鍵 ( 參照 BUYORDER 表 ) */
  Product_ID      INT                      NOT NULL,  /* 所進商品編號,主鍵, 外來鍵 (參照 PRODUCT 表 ) */
  Quantity        INT                      NOT NULL,  /* 商品數量 */
  Price           money                    NOT NULL   /* 商品進價 */
)

CREATE TABLE EnterStock    /* 入庫單表 */
(
  EnterStock_ID    INT IDENTITY(1,1)       NOT NULL, /* 入庫單編號 , 主鍵 */
  EnterDate        datetime                NOT NULL, /* 入庫時間 */
  Dept_ID          INT                     NOT NULL, /* 入庫部門 ,外來鍵 ( 參照 DEPT 表 )*/
  StoreHouse_ID    INT                     NOT NULL, /* 所入倉庫 ,外來鍵 ( 參照 STOREHOUSE 表)*/
  Employee_ID      INT                     NOT NULL  /* 入庫人 ,  外來鍵 ( 參照 EMPLOYEE 表)*/
  /*需新增 倉庫保管員如何來驗證入庫單 ?? */
)

CREATE TABLE EnterStock_Detail /* 入庫單明細 */
(
  EnterStock_ID    INT                     NOT NULL, /* 入庫單編號 , 主鍵, 外來鍵 (參照 ENTERSTOCK 表 )*/
  Product_ID       INT                     NOT NULL, /* 此種商品編號,主鍵, 外來鍵 (參照 PRODUCT 表 ) */
  Quantity         int                     NOT NULL, /* 此種商品數量 */
  Price            money                   NULL,     /* 此種商品參考價格  */
  HaveInvoice      bit                     not null, /* 此種商品有沒有開發票 ( 預設為 0 , 有沒有開票 )*/
  InvoiceNum       varchar(30)             NULL      /* 發票號 */
)


CREATE TABLE BackStock  /* 退庫單表 */
(
  BackStock_ID     INT IDENTITY(1,1)       NOT NULL, /* 退庫單編號 , 主鍵 */
  BackDate         datetime                NOT NULL, /* 退庫時間 */
  Dept_ID          INT                     NOT NULL, /* 退庫部門 ,  外來鍵 ( 參照 DEPT 表 )*/
  StoreHouse_ID    INT                     NOT NULL, /* 所退入倉庫 ,外來鍵 ( 參照 STOREHOUSE 表)*/
  Employee_ID      INT                     NOT NULL, /* 退庫人 ,    外來鍵 ( 參照 EMPLOYEE 表)*/
  Remark             varchar(250)            NULL    /* 退庫原因 */

)
CREATE TABLE BackStock_Detail /* 退庫單明細表 */
(
  BackStock_ID     INT                     NOT NULL, /* 退庫單編號 , 主鍵, 外來鍵 (參照 BACKSTOCK 表 )*/
  Product_ID       INT                     NOT NULL, /* 所退商品編號,主鍵, 外來鍵 (參照 PRODUCT 表 ) */
  Quantity         int                     NOT NULL, /* 退入數量 */
  Price            money                   NULL      /* 參考價格 */
 
)

CREATE TABLE LeaveStock  /* 出庫單表 */
(
  LeaveStock_ID    INT IDENTITY(1,1)       NOT NULL,  /* 出庫單編號 , 主鍵, 外來鍵 (參照 LEAVESTOCK 表 )*/
  LeaveDate        datetime                NOT NULL,  /* 出庫時間 */
  Dept_ID          INT                     NOT NULL,  /* 出庫部門 ,  外來鍵 ( 參照 DEPT 表 )*/
  StoreHouse_ID    INT                     NOT NULL,  /* 所出倉庫 ,外來鍵 ( 參照 STOREHOUSE 表)*/
  ToStoreHouse_ID  INT                     NOT NULL,  /* 所入倉庫 ,外來鍵 ( 參照 STOREHOUSE 表)*/
  Employee_ID      INT                     NOT NULL   /* 出庫人 ,    外來鍵 ( 參照 EMPLOYEE 表)*/
  /* 倉庫保管員如何來驗證出庫單 ?? */
)

CREATE TABLE LeaveStock_Detail  /* 出庫單明細表 */
(
  LeaveStock_ID    INT                     NOT NULL,  /* 出庫單編號 , 主鍵, 外來鍵 (參照 BACKSTOCK 表 )*/
  Product_ID       INT                     NOT NULL,  /* 所出商品編號,主鍵, 外來鍵 (參照 PRODUCT 表 ) */
  Quantity         int                     NOT NULL,  /* 出庫數量 */
  Price            money                   NULL       /* 出庫價格 */
)

CREATE TABLE BackSale  /* 退貨單表 */
(
  BackSale_ID      INT IDENTITY(1,1)       NOT NULL,  /* 退貨單編號 , 主鍵 */
  BackDate         datetime                NOT NULL,  /* 退貨日期  */
  Dept_ID          INT                     NOT NULL,  /* 退貨部門 ,  外來鍵 ( 參照 DEPT 表 )*/
  StoreHouse_ID    INT                     NOT NULL,  /* 退入倉庫 ,  外來鍵 ( 參照 STOREHOUSE 表)*/
  Employee_ID      INT                     NOT NULL,  /* 退貨人 ,    外來鍵 ( 參照 EMPLOYEE 表)*/
  Remark             varchar(250)            NULL     /* 退貨原因 */

)
CREATE TABLE BackSale_Detail  /* 退貨單明細表 */
(
  BackSale_ID      INT                     NOT NULL,  /* 退貨單編號 , 主鍵, 外來鍵 (參照 BACKSTOCK 表 )*/
  Product_ID       INT                     NOT NULL,  /* 所退商品編號,主鍵, 外來鍵 (參照 PRODUCT 表 ) */
  Quantity         int                     NOT NULL,  /* 退貨數量 */
  Price            money                   NULL       /* 價格 */
 
)


CREATE TABLE SaleOrder    /* 銷售合同 */
(
  SaleOrder_ID     INT IDENTITY(1,1)       NOT NULL,  /* 合同編號 , 主鍵 */
  WriteDate        datetime                NOT NULL,  /* 合同簽訂日期  */
  InsureDate       datetime                NOT NULL,  /* 合同生效日期  */
  EndDate          datetime                NOT NULL,  /* 合同到期日期  */
  Dept_ID          INT                     NOT NULL,  /* 簽訂部門, 外來鍵 ( 參照 DEPT 表 ) */
  Customer_ID      INT                     NOT NULL,  /* 客戶編號, 外來鍵 ( 參照 CUSTOMER 表 ) */
  Employee_ID      INT                     NOT NULL   /* 合同主要負責人, 外來鍵 ( 參照 EMPLOYEE 表) */
)
CREATE TABLE SaleOrder_Detail  /* 銷售合同明細表 */
(
  SaleOrder_ID     INT                     NOT NULL,  /* 銷售合同編號,主鍵, 外來鍵 ( 參照 BUYORDER 表 ) */
  Product_ID       INT                     NOT NULL,  /* 銷售商品編號,主鍵, 外來鍵 (參照 PRODUCT 表 ) */
  Quantity         int                     not null,  /* 商品數量 */
  Price            money                   null       /* 商品進價 */
)


CREATE TABLE Buy     /* 進貨表 ( 驗貨表 ) */
(
   Buy_ID          INT IDENTITY(1,1)         NOT NULL, /* 進貨編號 , 主鍵 */
   ComeDate        datetime                  NOT NULL, /* 進貨日期 */
   Dept_ID         INT                       NOT NULL, /* 進貨部門, 外來鍵 ( 參照 DEPT 表 ) */
   Employee_ID     INT                       NOT NULL  /* 驗貨人,   外來鍵 ( 參照 EMPLOYEE 表)*/
)

CREATE TABLE Buy_Detail  /* 進貨表明細 ( 驗貨表 ) */ 
(
  Buy_ID           INT                      NOT NULL, /* 進貨編號,主鍵, 外來鍵 ( 參照 BUY 表 ) */
  Product_ID       INT                      NOT NULL, /* 商品編號,主鍵, 外來鍵 ( 參照 PRODUCT 表 ) */
  BuyOrder_ID      INT                      NULL,     /* 採購合同,  外來鍵 ( 參照 BUYORDER 表 ) */
  Quantity         int                      not null, /* 數量 */
  Price            money                    null      /* 價格 */
 
  /* BUYORDER_ID 為 NULL 時, 為現金進貨 */ 
)

CREATE TABLE Sale   /* 銷售 表 */
(
  Sale_ID          INT IDENTITY(1,1)        NOT NULL,  /* 銷售 編號  */
  SaleDate         datetime                 not null,  /* 銷售 日期 */
  Dept_ID          INT                      NOT NULL,  /* 銷售部門, 外來鍵 ( 參照 DEPT 表 ) */
  Employee_ID      INT                      NOT NULL   /* 售貨人,   外來鍵 ( 參照 EMPLOYEE 表)*/
)

CREATE TABLE Sale_Detail  /* 銷售明細 ( 驗貨表 ) */ 
(
  Sale_ID          INT                      NOT NULL,  /* 銷售編號,主鍵, 外來鍵 ( 參照 SALE 表 ) */
  Product_ID       INT                      NOT NULL,  /* 商品編號,主鍵, 外來鍵 ( 參照 PRODUCT 表 ) */ 
  SaleOrder_ID     INT                      NULL,      /* 銷售合同, 外來鍵 ( 參照 SALEORDER 表 ) */
  Quantity         int                      not null,  /* 數量 */
  Price            money                    not null,  /* 價格 */
  Discount         int                      null       /* 折扣 */
 
  /* SALEORDER_ID 為 NULL 時, 為現金銷售 */
)


CREATE TABLE StockPile  /* 庫存表 */
(
  StockPile_ID     INT IDENTITY(1,1)        NOT NULL, /* 庫存編號 , 主鍵 */
  Dept_ID          INT                      NOT NULL, /* 商品所屬部門, 外來鍵 ( 參照 DEPT 表 ) */ 
  StoreHouse_ID    INT                      NOT NULL, /* 所在倉庫,     外來鍵 ( 參照 SOTREHOUSE 表 ) */  
  Product_ID       INT                      NOT NULL, /* 商品編號,     外來鍵 ( 參照 PRODUCT 表 ) */  
  FirstEnterDate   datetime                 not null, /* 此種商品第一次入庫時間 */
  LastLeaveDate    datetime                 null,     /* 此種商品最後一次出庫時間 */
  Quantity         int                      not null, /* 所存數量 */
  Price            money                    not null  /* 加權價 */
  /* LASTLEAVEDATE 為NULL 時,此種商品從來沒有 賣過 */
)