博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
刀塔传奇公会管理系统 ------ Pgsql 后台
阅读量:5311 次
发布时间:2019-06-14

本文共 3167 字,大约阅读时间需要 10 分钟。

背景:

系统会给出公会人员的情况,例如 几月几日XXXX加入公会,几月几日XXXX离开工会。

系统会给出所有人最近七天的活跃总数。

 

需要计算出所有人最近七天的平均活跃情况,加入时间不足七天的玩家,按实际天数计算。

 

数据存储方式选择:

1.   开始使用的Excel做的,编写了一些宏,增加了一个按钮来触发这个宏。数据稍微一多,弊病就露出来了。

     输入活跃数据时,需要手动寻找名字在第几行。多天的数据整理需要手工处理,数据量大时很容易造成数据错乱或数据丢失。

2.  计划使用Access数据库来存储,但发现Access的查询分析器需要单独下载,并且每次仅支持一句SQL执行。

3.  更换Window下的MySql来存储数据。一切安装完毕后,创建数据库的表后,发现表的内容不能很好的支持中文。编码问题,网上简单查找了一下解决办法,貌似需要新版的,而且仍然需要操作很多。有需要的可以参考一下

4.  本人比较数据Pgsql,还是用这个吧,不存在编码问题,完全免费开源。经过一番折腾,终于在Win7下搞定了。

 

数据库设计:

为了达到好用的效果,又去翻了书本温习了范式的概念,感觉关系数据库能做到3NF就不错了。

为了不产生大量的冗余数据,计划讲成员管理与贡献值数据分离。Member表中主键打算用游戏内的中文名字(也可以给每个成员定一个内部的id,效果相差应该不多)。

member表中的字段为 name,indate,outdate。name和indate字段为Not Null。若outdate为Null表示成员当前还在工会。

data表中的数据每天会新增约50条数据,当时间久了会产生一张很大的表,势必会影响访问效率。到时候想再变动就很困难了。为此计划data表按照日期来命名,也就是说每天都会产生一个新表出来。表内的字段只有一个,就是整数类型的活跃值。

 

源码:

-- Table: gonghui.member-- DROP TABLE gonghui.member;CREATE TABLE gonghui.member(  name character varying(20) NOT NULL,  indate character varying(20) NOT NULL,  outdate character varying(20),  CONSTRAINT member_pkey PRIMARY KEY (name ))WITH (  OIDS=FALSE);ALTER TABLE gonghui.member  OWNER TO root;
-- Table: gonghui.data20141209-- DROP TABLE gonghui.data20141209;CREATE TABLE gonghui.data20141209(  name character varying(20) NOT NULL,  data integer,  CONSTRAINT data20141209_pkey PRIMARY KEY (name ),  CONSTRAINT data20141209_name_fkey FOREIGN KEY (name)      REFERENCES gonghui.member (name) MATCH SIMPLE      ON UPDATE NO ACTION ON DELETE NO ACTION)WITH (  OIDS=FALSE);ALTER TABLE gonghui.data20141209  OWNER TO root;
-- Function: gonghui.lesssevendays(integer)-- DROP FUNCTION gonghui.lesssevendays(integer);CREATE OR REPLACE FUNCTION gonghui.lesssevendays(days integer)  RETURNS integer AS$BODY$BEGIN    if (days > 7 ) then        return 7;    end if;    if (days < 1 ) then        return 1;    end if;    return days;END;$BODY$  LANGUAGE plpgsql VOLATILE  COST 100;ALTER FUNCTION gonghui.lesssevendays(integer)  OWNER TO root;
lesssevendays(days integer)
-- Function: gonghui.fn_calc_result(character varying, character varying)-- DROP FUNCTION gonghui.fn_calc_result(character varying, character varying);CREATE OR REPLACE FUNCTION gonghui.fn_calc_result(psv_date character varying, psv_compare_date character varying)  RETURNS integer AS$BODY$declarePSV_SQL character varying(512) := '';PSV_TBL_NEW character varying(512) := '';PSV_TBL_OLD character varying(512) := '';BEGINdrop table dataresult;PSV_TBL_NEW := 'data' || psv_date;PSV_TBL_OLD := 'data' || psv_compare_date;PSV_SQL := 'create table dataresult as select m.Name as name,  lesssevendays(to_date(''' || psv_date || ''','''|| 'yyyymmdd'''|| ') - date(m.Indate)) , d.data/ lesssevendays(to_date(''' || psv_date  || ''',''' || 'yyyymmdd'''|| ') - date(m.Indate)) as avg_data, d.data as newdata, y.data as olddata from member m,  ' || PSV_TBL_NEW || ' d,  '|| PSV_TBL_OLD ||' y where m.Name = d.name and m.Outdate = '''' and m.name = y.name';    EXECUTE(PSV_SQL);    return 0;END;$BODY$  LANGUAGE plpgsql VOLATILE  COST 100;ALTER FUNCTION gonghui.fn_calc_result(character varying, character varying)  OWNER TO root;
fn_calc_result(character varying, character varying)

 

转载于:https://www.cnblogs.com/zhangzhiheng/p/4154483.html

你可能感兴趣的文章
MIT Scheme 的基本使用
查看>>
程序员的“机械同感”
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>
c++回调函数
查看>>
linux下Rtree的安装
查看>>
【Java】 剑指offer(53-2) 0到n-1中缺失的数字
查看>>
Delphi中ListView类的用法
查看>>
多米诺骨牌
查看>>
Linq 学习(1) Group & Join--网摘
查看>>
asp.net 调用前台JS调用后台,后台掉前台JS
查看>>
Attribute(特性)与AOP
查看>>
苹果手表:大方向和谷歌一样,硬件分道扬镳
查看>>
Competing Consumers Pattern (竞争消费者模式)
查看>>
Android面试收集录15 Android Bitmap压缩策略
查看>>
PHP魔术方法之__call与__callStatic方法
查看>>
ubuntu 安装后的配置
查看>>
【模板】对拍程序
查看>>
【转】redo与undo
查看>>
解决升级系统导致的 curl: (48) An unknown option was passed in to libcurl
查看>>
Java Session 介绍;
查看>>