Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

如何设计这样要求的表,该如何实现这个要求呢~

zhy6271  发表于:2010-07-22 13:24:35  
复制

例子: 一张编号为SB00001的人民币为100元,A君拿这张人民币买了30元的东西,找零一张编号SB000002的20元和一张编号SB000003的50元,然后又拿50元买了40元的东西,找零一张编号SB000004的10元,然后买了30元的东西。。
求,这100元的花费过程。。
查询SB000003或其他人民币编号,均可以查询到所有消费过程
如何设计数据库的表和关系...

 

Top
andymark 发表于:2010-07-22 13:44:01

有点类似产品的拆分过程

 

把A拆分为B C D

B 再拆分为 C F

 

按上面加入进销存等类似操作,即可得出手上有多少钱和具体编号,消费过程也就是支出转换过程

 

 



zhy6271 发表于:2010-07-22 14:31:44

总版大人,能帮给个示例么..

 

就表的设计就行...



煮江品茶 发表于:2010-07-22 16:20:02

看似简单,其实不是简单问题。



萧云 发表于:2010-07-22 16:26:04

实际上你要分析的是 人民币 的流通过程。

而你并没有找一个在关系数据库中表达这个流通过程的方法,因此求助。

 

这过程用树模型来描述是恰当的。在关系数据库中要使用父子连接的方式来实现。

 

表的实体结构可采用如下表示:

 

人民币流通过程 
交易编号(PK)
付出人民币编号
付出人民币面值
交易金额
找回人民币编号
找回人民币面值
父交易编号
子交易编号

 

 

每次录入数据时必须取库存剩余可用的人民币编号及剩余的人民币所对应的上次交易编号即父交易编号,并且在本次录入结束时触发程序更新父交易中子交易编号。这样才能完整的表达与描述人民币流通过程。而表达这个流通过程的控件首选是 TREE 控件。

 

这个分析的前提是 每一次交易过程都是可控的可追朔的,也就是可查知的。如果这个前提做不到,那么上述分析是不成立的。

 

总之 在数据库概念中 它是一个树范畴,通过树的主干可以寻到所有的分支与叶子,也可以通过枝干反向找到树的根。

 

 



煮江品茶 发表于:2010-07-22 16:33:35

不知道这样是否可行:

币号表:
主币ID(主键),币号,币值
找零表:
主币ID(外键),找零币ID(主键),币值
消费表:
找零币ID(外键),消费ID,消费项目,消费金额



zhy6271 发表于:2010-07-23 08:51:22

楼上萧云说的树状结构也是我之前考虑的方式。

 

这种的结构的话简单易懂,一目了然,但是,会不会出现无限多的分支?

 

一张钱可能一次,二次就花完,也可能10多次花完。

 

品茶斑竹的思路, 我尝试了下,但是没有能找到合适的办法呈现整个消费链明细。

 

我只能追溯到查询编号的上一次和下一次的消费。

 

而且有找零可能找5张10元,也可能找1张50元,也可能将10张10元的银行换成100元。



萧云 发表于:2010-07-23 17:23:13

有一点可以肯定:就是付出的人民币的面值只有一种,而找回来的人民币面值可以是多种。这是一个很重要的规律。

 

你分析一下,是否是这样?



煮江品茶 发表于:2010-07-24 09:28:30

这样操作是否可以找到所有的消费:

1、在币号表中输入100元的币值和币号,同时在找零表中输入100元的主币ID,在币值输入100。即将首次记录也看成是一次找零,以便在消费表中输入数据。

2、在消费表中输入100整币的消费情况。

3、其后每次找零和消费均不增加币号表记录,只增加找零表和消费表记录。

这样的话,该100元的找零和消费就可以通过币号表全部找出来了。

这个方案在表间不考虑零币之间的关系,只考虑所有零币与第一个整币的关系,这样就可以克服无限分级的问题。如果确需找到零币之间的关系,可以通过找零表记录的先后顺序(即表内数据关系)通过ADO记录集解决。

 



煮江品茶 发表于:2010-07-24 09:42:42
找零表表中漏写了一个币号字段

煮江品茶 发表于:2010-07-24 10:46:31
zhy6271 发表于:2010-07-25 09:16:12

煮江大大的思路和我昨天和我们财务沟通的方法有些近似。

 

但是我还没做出试验,今天看到煮江大大已经给出实例~

 

真是万分感激。

 

我先下载研究下



煮江品茶 发表于:2010-07-25 09:30:44

可到《华山论剑》一文中下载改进版。



zhy6271 发表于:2010-07-25 09:53:49

煮江大大的库我下载来看了下~

 

煮江大大您这个您还是不能处理零换整的问题。

 

依然是以树状考虑的



煮江品茶 发表于:2010-07-25 11:51:04

zhy6271同志:你权变的能力不够,呵呵。

 

零换整,不就是一种反向操作吗?既然是反向操作,在主币表和零币表中用负数反映零换整不就可以了吗?

 

如果对这个思路难以理解的话,还有一个方法,就是在主币表加一个业务类型字段,标识出是整找零还是零换整就可以了。不过我本人不太赞成这样处理,这样处理会使得算法处理复杂话。



zhy6271 发表于:2010-07-25 11:59:00

我现在就是在货币方面加入一个动作字段。

 

您说的反向我理解。

 

但是除了零换整,还有如70买60元的东西。

 

诸如,取钱,换零,换整,旧换新,退货退钱,找零,6个动作



煮江品茶 发表于:2010-07-25 12:57:33

呵呵,不会吧?这么多业务类型中都要记货币号?效率太低了吧?采用什么方式输入呢?扫描仪?



zhy6271 发表于:2010-07-25 15:03:40

哎,相当郁闷啊~

 

确实是实际业务中用到。

 

但发行量没那么高,而且所有票据只能使用一次。

 

 



萧云 发表于:2010-08-01 00:22:12

看看这个例子吧。

用treeview 控件实现的

 

-----------------------------

点击下载此附件

-----------------------------

 



萧云 发表于:2010-08-01 09:05:04

上面示例数据库中的表和代码 只做了最核心的设计,因此还需要你自己参考与调试。

你可以自己添加“交易货品”等相关字段,窗体设计也可以把列表框更换为子窗体,或者再增加其他控件来实现你要求。

 

你的这个问题有一定的代表性,希望把解决后的示例放到你在本站的空间里,为其他路人也点亮一盏指路的明灯。



zhy6271 发表于:2010-08-01 10:46:51

呵呵,感谢萧云的关注...

 

这个问题我最近放了放~

 

然后昨天和朋友聊天的时候,又有了种新的想法~

 

人民币交易流水表, 人民币交易关系表。

 

不知道是否能简化结构..

 



总记录:22篇  页次:1/2 9 1 2 8 :