不解的事情接踵而来,关于表间关系约束问题

dfwxj 2011-12-05 12:48:29
客户档案表:
ykh.khbh 客户编号,主键
ykh.khmc 客户名称,唯一索引

单据表:
yiomain.mno 单据号,主键
yiomain.khbh 无索引

要求:单据表的KHBH允许为空,要求如果有值必须来自ykh.khbh ;若单据表有记录,则客户档案表的相关记录不能删除。建立了ykh.khbh 与yiomain.khbh的关系,选中“对INSERT和UPDATE强制关系”,不选两个级联。

遇到的问题是:单据表中新增记录时,不设置khbh就无法插入。

************************************

这个问题在写到“单据表的KHBH允许为空”时,我发现了原因:是我多事,为了在表中看了顺眼,给所有的字段都设置了默认值,yiomain.khbh的默认值为''!在SQL中,''是有值的,而真正的空值应当是NULL!所以将默认值删除就解决了。

呵~~~~~既然写了,就发出来给大家提个醒了~~~~关系中用到的字段,要谨慎设置默认值!
...全文
97 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dfwxj 2011-12-06
  • 打赏
  • 举报
回复
我的做法是:保存时检查各个必要项目。日期合法性、客户、至少有一条数据记录、相关的数量单价的值要合法等等。就好比去超市购物,我可以挑选了一大框物品,最后一个也不要,或者是交给其他人给我结帐。
WWWWA 2011-12-06
  • 打赏
  • 举报
回复
建立关系来约束,写代码轻松点
没错,交给数据库完成
dfwxj 2011-12-06
  • 打赏
  • 举报
回复
呵~~~~~~楼上说得全部正确!

但是,事实上“允许客户为空”有两种意思:一是该单据不需要客户,比如:其他出入库、商品升损、调价、期初、期末等等;二是暂时不确定客户,在保存时确定。

这两种情况在我的程序中全部存在。

先建立客户档案,再建立单据,是对的。但不是所有的单据都的“客户”这个项目,当然可以建立“无客户”这个客户来代替,不过这样做太牵强了。我的思路已经改进了,将上游供应商和下游客户全并称为“客户”。几乎所有的系统都是分“供应商”和“客户”的,所以在表中就是入库单有供应商无客户,出库单有客户无供应商。

暂时不确定客户是根据现实情况来做的,可能有人会这样说“怎么可能连客户都不知道就出单呢”,是的,客户是知道的,但具体是什么完整名称,不一定当时就确定,比如一个大客户有几个分部,业务经理会先把要货计划给开票员开票,然后继续确认开给哪一个分部。这种情况实际工作中太多了。

建立关系来约束,写代码轻松点
都市夜猫 2011-12-05
  • 打赏
  • 举报
回复
客户编号这种字段应该是不允许为空的,否则某张单据就可能变成孤魂野鬼,在做财务报表时,这张单应该向谁收款或者付款给谁呢?只有在用户的业务规则允许存在不确定账单时才有可能设计成允许为空,不过这会造成财务监管漏洞,通常我们的处理原则是说服用户,无法说服的话就在合同中明确说明,以免客户对不上账时把责任推给软件。

表间关系的校验应该交给数据库去处理,不赞成用前端代码来处理,这在团队开发中尤其重要,如果交给前台代码来校验,你很难保证所有程序员都编写了完整的校验代码;即使不是团队开发,从性能上来看,交给数据库处理也好于前端代码处理的效果。另外,在移植代码到其他语言时也可以有效的减少工作量(当然,如果更换数据库平台的机会大于更换开发语言的机会,结果则正好相反)。

十豆三 2011-12-05
  • 打赏
  • 举报
回复
你这样设置关系,好处是客户端程序编写简单。

如果不怕麻烦,可以不设置关系,把这些问题交给客户端,如:
删除客户档案时,检测此客户是否有订单,有则不让删除,无则可以删除。
而单据表中的客户编号是通过下拉列表框选择客户表中的记录。
也就是说一些限制、报错信息等由你控制。
wwwwb 2011-12-05
  • 打赏
  • 举报
回复
主、外键关系,从数据完整性的角度出来,应该将KMKH设为外键,并加索引,当然,根据你的实际情况判断
ACMAIN_CHM 2011-12-05
  • 打赏
  • 举报
回复
这种关系,也就是关系数据库中的外键参照。 指 单据表 中的记录中的khbh字段值必须是 客户档案表 中存在的。 而空显然是在表客户档案表不可能存在的。 自然就不让你插入数据。

这也是为什么有些观点是不在数据库中设置这种外键关系,而是自己通过程序实现。 (这个观点不一定正确)

从实际业务观点, 如果连客户都不知道,怎么创建订单? 如果是新客户,一般的软件设计是,1)创建新客户,2)创建些客户的订单。

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧