SQL-SERVER2000数据库 VC++开发
一套管理系统,假设是仓库管理系统,有5个地方不同的公司部门使用,每个地方有自己的系统和数据库服务器,是放在各个地方的内网中的.这5个部门之间是没有联网起来的在总部,也安装该系统.想把5个不同地方的数据汇总起来,便于在总部的查询。总部与各地方的分部门是只能通过Internet联接的。1、大家觉得如何设计数据库主键好?
2、每当有各个部门有数据更新后,如何及时更新到总部数据库服务器中去?
我现在的设计思路:
1、所有主键设计成varchar型的,在前面加部门编号的前缀。例如上海的部门用SH_0001,SH0002这样,这样才能汇总后数据不会有重复的键,但后面的那个0001如何生成好了?2、各个地方部门有数据更新后,(1)将更新的数据即时写到总部服务器中,但如果网络断开的情况会比较麻烦。(2)将更新的数据写入本地的一个数据表中,记录更新的记录的表名,记录ID号,是插入还是删除还是修改。然后一段时间后去读这个表让更新的数据写到总部服务器。
一套管理系统,假设是仓库管理系统,有5个地方不同的公司部门使用,每个地方有自己的系统和数据库服务器,是放在各个地方的内网中的.这5个部门之间是没有联网起来的在总部,也安装该系统.想把5个不同地方的数据汇总起来,便于在总部的查询。总部与各地方的分部门是只能通过Internet联接的。1、大家觉得如何设计数据库主键好?
2、每当有各个部门有数据更新后,如何及时更新到总部数据库服务器中去?
我现在的设计思路:
1、所有主键设计成varchar型的,在前面加部门编号的前缀。例如上海的部门用SH_0001,SH0002这样,这样才能汇总后数据不会有重复的键,但后面的那个0001如何生成好了?2、各个地方部门有数据更新后,(1)将更新的数据即时写到总部服务器中,但如果网络断开的情况会比较麻烦。(2)将更新的数据写入本地的一个数据表中,记录更新的记录的表名,记录ID号,是插入还是删除还是修改。然后一段时间后去读这个表让更新的数据写到总部服务器。
1、所有主键设计成varchar型的,在前面加部门编号的前缀。例如上海的部门用SH_0001,SH0002这样,这样才能汇总后数据不会有重复的键,但后面的那个0001如何生成好了?
-------------------------------------------------------------------------
这个不是问题吧?0001有很多种办法生成比方说select count(*) as count from table
count+1就是你新的序号。
select top 1 colA from table order by colA desc然后对这个字段内容分析,截取后+1就可以了。
--------------------------
2、各个地方部门有数据更新后,(1)将更新的数据即时写到总部服务器中,但如果网络断开的情况会比较麻烦。
-----------------
这个问题,如果网络断开,那是没有办法的事情,想及时查询,不可能,只能等网络通了再说
-----------------------------------------
。(2)将更新的数据写入本地的一个数据表中,记录更新的记录的表名,记录ID号,是插入还是删除还是修改。然后一段时间后去读这个表让更新的数据写到总部服务器。这个,我没明白楼主意思呵呵
2、分部的数据更新是比较大的,常常有新的数据插入的。不知有没有直接的数据库操作工具可用,不用让程序来担此工作而由数据库直接去控制。我只知道象DB2有数据同步工具,两个数据库设置好对应关系后,其中一个数据库有数据变动都会自动让另外一个数据库也跟着变动,但我只用过那样的两个单库对应的,就是A数据库始终与B数据库里的内容完全是一样的。象这种将5个库的内容汇总到一个库中,在SQL-SERVER中不知有什么好工具没有。3、将更新的数据写入本地的一个数据表中,记录更新的记录的表名,记录ID号,是插入还是删除还是修改。然后一段时间后去读这个表让更新的数据写到总部服务器。我的意思是分部的数据库有任何一条更新记录,既然由于网络问题不能马上即时更新到总部数据库去后,就要把这些更新的记录先写在本地表中储存下来了,到时再一起根据这些记录下来的数据更新记录一起更新到总部去了。但这样的做法就导致在分部的程序中,每一个操作数据库的地方例如每次插入一条新记录都要再写一条记录进我的记录更新表,这样程序会导致麻烦很多麻烦各位再帮忙想想了,呵呵,我也不知表达清楚我的意思没有了
-------------------------------------------------------
2、分部的数据更新是比较大的,常常有新的数据插入的。不知有没有直接的数据库操作工具可用,不用让程序来担此工作而由数据库直接去控制。我只知道象DB2有数据同步工具,两个数据库设置好对应关系后,其中一个数据库有数据变动都会自动让另外一个数据库也跟着变动,但我只用过那样的两个单库对应的,就是A数据库始终与B数据库里的内容完全是一样的。象这种将5个库的内容汇总到一个库中,在SQL-SERVER中不知有什么好工具没有。多库汇总,SQL里我没有什么好办法,基于这种程序,我都是在程序端来处理
---------------------------------------------
3、将更新的数据写入本地的一个数据表中,记录更新的记录的表名,记录ID号,是插入还是删除还是修改。然后一段时间后去读这个表让更新的数据写到总部服务器。我的意思是分部的数据库有任何一条更新记录,既然由于网络问题不能马上即时更新到总部数据库去后,就要把这些更新的记录先写在本地表中储存下来了,到时再一起根据这些记录下来的数据更新记录一起更新到总部去了。但这样的做法就导致在分部的程序中,每一个操作数据库的地方例如每次插入一条新记录都要再写一条记录进我的记录更新表,这样程序会导致麻烦很多这个问题,你可以使用导出来处理,比方说程序中导出需要的数据,然后把这个文件上传回总部,由总部的程序负责接收,并分析后导到总部数据库中。
生成0001很容易right('0000'+你的编号,4)生成的就是你需要的四位流水这里问题是我如何取得最后一条记录的ID号了
如果我的记录里ID有:SH_1,SH_2,SH_11,SH_3,SH_105
里面应该SH_105是最大也是最后一条记录,可我如何排序取出这条记录了?如果直接按string的ASC排序的话,是得不到这个结果的
ID Name
SH_1 张三
SH_11 张三
SH_2 张三
SH_5 张三我现在再写入一条记录,先读出最后的ID数,再截出后面的字符再加1来处理
select top 1 ID from table order by ID desc问题是这样的查询后得到的是ID = SH_5这条记录啊,而得不到SH_11,SH_11才应该是里面最大的记录了。这样我取出来的最大ID记录就不正确了
------------------------------------------
另外,你目前的这个
SH_1 张三
SH_11 张三
SH_2 张三
SH_5 张三
可以使用select count(*) from table来获得记录数,在这个数字上+1也可以这是两个思路当然还有其他的办法的
这样数据库里的记录就会有:
SH_1 张三
SH_11 张三
SH_200 张三
SH_50 张三
SH_1111 张三等这样的记录。我想的就是如何方便点直接取出在库中最后一条记录出来然后进行计算,求出新的ID号后再写入数据库中------------------------------------------------
可以使用select count(*) from table来获得记录数,在这个数字上+1也可以
用求记录和的话,如果库里的ID是不继续的,例如被删除的很多记录后,就会求出的不对了。例如如果库里就只有上面的5条记录,如何才取出最大的ID是SH_1111了?我现在最想了解的是这个问题了。
非常感谢老兄的关注了,再次感谢!
现在因为在分部才会有不停的写入记录操作,而在总部不会有插入记录的,只有查询的.
我想先把分部的操作弄简单点.
我想在各分部的ID就按自己的递加(ID也为字符型的,因为考虑到前期总部用的程序系统和分部的一样的系统,所以分部也只能把ID定为字符型)
SH 表
ID NAME
1 张三
2 张三
3 张三
11 张三然后向总部汇总的时候,再把ID加前缀SH_往总部传在分部是需要不停的写入记录的,我想在分部的ID就有字符型的1,2,3,4,11这样的,取了最大的再加1写进去. 这样会不会快点?这样的语法要怎么写才会比上面的那种会运算快了?而且,另外一个问题,如果上传上去,表的主键改为前面加SH_的前缀了,那那些跟这个表关联的记录怎么去找这个主键?或者还有什么别的好办法解决了?谢谢