17.6. 設計畫面

報表、業務邏輯處理器資料速查等功能都附掛在畫面之下。

Tip

PostERPlow-code(低程式碼)資訊系統框架。資訊人員在PostERP上面開發Create, Read, Update, DeleteCRUD)畫面,不需要撰寫程式。

17.6.1. 在資料庫生成畫面使用到的table

樣品:

--sales - master--
CREATE TABLE t_220 (
CONSTRAINT f0 FOREIGN KEY (f0) REFERENCES t45 (f1),
CONSTRAINT f3 FOREIGN KEY (f3) REFERENCES t_46 (f1),
CONSTRAINT f4 FOREIGN KEY (f4) REFERENCES t9 (f1),
CONSTRAINT f6 FOREIGN KEY (f6) REFERENCES t43 (f1),
CONSTRAINT f9 FOREIGN KEY (f9) REFERENCES t189 (f1),
f0	VARCHAR(15),			--company#
f1	INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,		--sale#
f2 	TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,		--sale date time
f3	INTEGER,				--customer#
f4	VARCHAR(3) NOT NULL,	--currency#
f5	NUMERIC(9,5) CHECK(f5 > 0) NOT NULL,	--exchange rate
f6	VARCHAR(12),	--salesperson#
f7	INTEGER,		--sales revenue received in advance#
f8	DATE,			--A/R due date
f9	SMALLINT,		--tax#
f99	VARCHAR(12)
);
--sales - item--
CREATE TABLE t_221 (
CONSTRAINT f1 FOREIGN KEY (f1) REFERENCES t_220 (f1) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT f2 FOREIGN KEY (f2) REFERENCES t_133 (f1),
CONSTRAINT f3 FOREIGN KEY (f3) REFERENCES t_130 (f1),
CHECK(verify_unit(f2,f3)) NOT VALID,
PRIMARY KEY (f1,f2),
f1	INTEGER,			   	--sale#
f2	VARCHAR(20),			--item#
f3	VARCHAR(3) NOT NULL,	--unit#
f99	VARCHAR(12)
);
			

17.6.1.1. 特殊欄位

  • 資料表裏的f0欄位區隔組織(例如:集團企業的個別公司)資料。

    如果某一個table有f0欄位,則凡是f01的記錄,是公司編號1的資料,其餘類推。設計SQL或function時,應謹慎過濾這個欄位裏的值。同時,請務必加上連結到t45.f1constraint以做為其foreign key

  • table的每一筆資料在欄位f99(如果有的話)記錄其擁有者。PostERP在用戶輸入新記錄的時候自動在f99填入該用戶的帳號以註記該筆記錄的擁有者。參見Section 6.3資料記錄權限。只有記錄的擁有者才有權更改或刪除該筆記錄。

    如果某table沒有f99這個欄位,則全部使用者都可以更改這個table

  • 如果某table含有f100這個欄位,且其資料型態是BIGINT,則該table自動接受使用人附掛任何檔案在此table。每一筆記錄接受最多32767個附掛檔案。

    table如果有f100欄位,則務必設定DEFAULT NEXTVAL('unique_int_seq')

    一旦在某table設置了f100欄位,務必也設計ruletrigger。這個ruletrigger的作用是:一旦使用人刪除某記錄,則這個ruletrigger就自動刪除該附掛檔案。例如:

    樣品:

    --inventory items--
    CREATE TABLE t_133 (
    CONSTRAINT f2 FOREIGN KEY (f2) REFERENCES t_130 (f1) ON UPDATE CASCADE,
    f1	VARCHAR(20) PRIMARY KEY,	--item#
    f2	VARCHAR(3) NOT NULL,	--Finest Unit Of Measure (FUOM)
    f3	SMALLINT NOT NULL,	--valid number of decimals for quantity
    f99	VARCHAR(12),
    f100 BIGINT DEFAULT NEXTVAL('unique_int_seq')
    );
    
    CREATE OR REPLACE RULE r_133d AS ON DELETE TO t_133 DO ALSO DELETE FROM t61 WHERE f1=OLD.f100;
    						

    也必須設計機制,於使用者刪除紀錄後,系統也同步自檔案系統刪除附掛檔案。備份資料庫時,也必須備份對應的附掛檔案。

17.6.1.2. 為避免與兆筆的設計衝突,請注意下面各項,以資區別:

  • metadata table增加的欄位,請務必加上_做為欄位命。例如請用這些名稱去新增欄位:f_1f_97f_103

  • 對新table的命名,必須附帶_。例如:t_120t_143d_143

  • 對新view的命名,必須附帶_。例如:v_120v1_43

17.6.1.3. 請注意!

  • 由於桌面版客戶軟體的限制,請用VARCHAR,避免使用TEXT。如果桌面版客戶軟體發生「access violation」錯誤或默默當掉的話,請嘗試縮短顯示的VARCHAR欄位,看看能否消除該錯誤。2048個字元以內的寬度似乎都正常。

  • 如果某tableINSERTUPDATE、和DELETEtrigger要生成會計分錄,而該卻沒有SERIAL欄位做其primary key的話,請加入SERIAL欄位做其surrogate key。請參見應用系統#2裏的t_33以及其trigger

  • 請使用TIMESTAMPTZ,避免TIMESTAMP。後者似乎與瀏覽器不相容。

  • 避免在BOOLEAN欄位存入NULL這個值。因為該值容易造成混淆。設定DEFAULT以改善這種情況。

17.6.1.4. 請注意!

如果應用伺服器仍在運轉中而且系統開發人員用Data Definition Language,DDL,對任何metadata(或稱之為資料字典)的table定義(例如:欄位的資料型態、欄位、新欄位、被刪掉的欄位)做過修改,則必須connect到同一個資料庫,執行這一道SQL:

NOTIFY "DDLExecuted"
				

其目的是:通知應用伺服器更新其cache。

換言之,在應用伺服器運行中,如果執行過任何Data Definition Language(DDL),一定要儘速通知應用伺服器。如果未能即時這樣做,則使用到這些table的客戶程式可能開始發生異常。

17.6.2. 設定欄位屬性

Figure 17-3. 設定欄位屬性

17.6.3. 指定畫面使用到的table

Figure 17-4. 指定畫面使用到的table

17.6.4. 完工樣本畫面

Figure 17-5. 完工樣本畫面

完成CRUD畫面的開發之後,即可加入到選單中,供使用人開啟。