报表、业务逻辑处理器、资料速查等功能都附挂在屏幕之下。
![]() | PostERP是low-code(低代码)信息系统框架。信息人员在PostERP上面开发Create, Read, Update, Delete(CRUD)屏幕,不需要撰编程。 |
样品:
--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) ); |
资料表里的f0字段区隔组织(例如:集团企业的个别公司)资料。
如果某一个table有f0字段,则凡是f0含1的记录,是公司编号1的资料,其余类推。设计SQL或function时,应谨慎过滤这个字段里的值。同时,请务必加上连结到t45.f1的constraint以做为其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字段,务必也设计rule或trigger。这个rule或trigger的作用是:一旦使用人删除某记录,则这个rule或trigger就自动删除该附挂文档。例如:
样品:
--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; |
也必须设计机制,於使用者删除纪录后,系统也同步自文档系统删除附挂文档。备份数据库时,也必须备份对应的附挂文档。
对metadata table增加的字段,请务必加上_做为字段名。例如新增这些字段:f_1、f_97、f_103。
对新table的命名,必须附带_。例如:t_120、t_143、d_143。
对新view的命名,必须附带_。例如:v_120、v1_43。
由於桌面版客户软件的限制,请用VARCHAR,避免使用TEXT。如果桌面版客户软件发生「access violation」错误或默默当掉的话,请尝试缩短显示的VARCHAR字段,看看能否消除该错误。2048个字元以内的宽度似乎都正常。
如果某table的INSERT、UPDATE、和DELETE有trigger要生成会计分录,而该却没有SERIAL字段做其primary key的话,请加入SERIAL字段做其surrogate key。请参见应用系统#2里的t_33以及其trigger。
请使用TIMESTAMPTZ,避免TIMESTAMP。后者似乎与浏览器不相容。
避免在BOOLEAN字段存入NULL这个值。因为该值容易造成混淆。设定DEFAULT以改善这种情况。
如果应用服务器仍在运转中而且系统开发人员用Data Definition Language,DDL,对任何metadata(或称之为资料字典)的table定义(例如:字段的资料型态、字段、新字段、被删掉的字段)做过修改,则必须connect到同一个数据库,执行这一道SQL:
NOTIFY "DDLExecuted" |
其目的是:通知应用服务器更新其cache。
换言之,在应用服务器运行中,如果执行过任何Data Definition Language(DDL),一定要尽速通知应用服务器。如果未能即时这样做,则使用到这些table的客户程序可能开始发生异常。