接下來的內容,我會建構一個非常小,但是還算齊全的訂單資料庫。因為只是用來展示,和實際的檔案結構比起來,當然是精簡非常多,不過還是有基本的參考價值,因為篇幅的關係,只能列出 MS-SQL 的版本,MariaDB 的版本請自行修改。
/*
zenOrder 測試 DB 的 Table Schema
*/
--客戶資料
CREATE TABLE zen_customer (
cid varchar(10) NOT NULL PRIMARY KEY,
cname nvarchar(20),
connectperson nvarchar(60),
deliveraddress nvarchar(200),
pid varchar(10),
doc_path varchar(200),
memodoc nvarchar(200),
create_user nvarchar(20),
create_date datetime,
update_user nvarchar(20),
update_date datetime
);
--人員資料
create table zen_person (
pid varchar(20) not null,
pname nvarchar(100),
did varchar(10), --所屬部門(popup)
birthday datetime,
address nvarchar(200),
pic_path varchar(200), --上傳圖片
doc_path varchar(200), --上傳文檔
pmemo nvarchar(600),
create_date datetime,
create_user varchar(20),
edit_date datetime,
edit_user varchar(20)
primary key (pid)
)
--部門
create table zen_department (
did varchar(10) not null,
dname nvarchar(100),
dboss varchar(20), --部門主管(popup)
dmemo nvarchar(200)
primary key (did)
);
--人員履歷紀錄
create table zen_resume (
pid varchar(20) not null,
rsdate1 varchar(10), --起始期間(年月)
rsdate2 varchar(10), --結束
resume_corp nvarchar(100),
resume_title nvarchar(100),
resume_desc nvarchar(600),
isboss char(1), --是否主管
primary key (pid,rsdate1,rsdate2)
);
/*
倉庫檔
*/
CREATE TABLE zen_warehouse (
wid varchar(10) NOT NULL PRIMARY KEY,
wname nvarchar(20),
wtype varchar(10),
wtel varchar(100),
waddress nvarchar(200),
memodoc nvarchar(600)
);
/*
商品檔
*/
CREATE TABLE zen_product (
prodid varchar(50) NOT NULL PRIMARY KEY,
prodcname nvarchar(100),
scancode varchar(20),
saleprice decimal(12, 2),
pricea decimal(12, 2),
priceb decimal(12, 2),
image_path1 varchar(200),
image_path2 varchar(200),
memodoc nvarchar(200),
create_user nvarchar(20),
create_date datetime,
update_user nvarchar(20),
update_date datetime
);
/* 訂單主檔 */
CREATE TABLE zen_order2_m (
billno varchar(12) NOT NULL PRIMARY KEY,
billdate datetime,
onhanddate datetime,
issign char(1),
cid varchar(10),
connectperson nvarchar(60),
deliveraddress nvarchar(200),
pid varchar(10),
did varchar(10),
invoicetype smallint,
wid varchar(10),
doc_path varchar(200),
memodoc nvarchar(2000),
totalamount decimal(18, 6),
taxamount decimal(12, 2),
create_user nvarchar(20),
create_date datetime,
update_user nvarchar(20),
update_date datetime,
sign_user nvarchar(20),
sign_date datetime
);
/* 訂單明細檔 */
CREATE TABLE zen_order2_d (
billno varchar(12) NOT NULL, --關聯訂單表頭
seqno int, --序號(order by seqno 顯示排序用)
prodid varchar(50), --產品編號
prodcname nvarchar(100), --品名
qty decimal(18, 6), --數量
unit varchar(10), --單位
price decimal(18, 6), --單價
subamount decimal(18, 6), --小計(qty*price)
memochar1 nvarchar(30), --備註一
memochar2 nvarchar(30), --備註二
uniqueno int NOT NULL IDENTITY(1,1),
PRIMARY KEY (billno, uniqueno)
);
/* 庫存餘額檔 */
CREATE TABLE zen_invfinal (
prodid varchar(10) NOT NULL,
wid varchar(10) NOT NULL,
qty decimal(18, 6),
lowerqty decimal(18, 6),
PRIMARY KEY (prodid, wid)
);
有了基本的資料庫結構,接下來就是要實際練習開發幾支 Store Procedure,下面先列出幾支功能列表,稍後的內容會繼續完善。Store Procedure 並不困難,只要多寫、多想、多看範例,隨著經驗的累積,就會越來越有效率。所以下面盡量以實際的範例說明。
您也可以先練習看看,可以自己先設定規格,然後實作。稍後會附上簡單的規格及主要的程式碼片段。