工资数据库设计的问题

newp 2003-05-14 08:59:23
用sql数据库
问题1:是用一年一个表还是一个月一个表?
如果是一个月就用一个工资表,那么部门、人员表是否也要一个月一个(考虑部门汇总的问题)?
如果是一年一个表,那么如果用户用5月份的公式去重新计算1月份工资(公式已经改动)怎么办?不允许操作?
问题2:一个sql数据库文件内最多可以包含多少个表?(上万个可以吗?)
谢谢!!!
...全文
103 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lynx1111 2003-05-15
  • 打赏
  • 举报
回复
mark!
newp 2003-05-15
  • 打赏
  • 举报
回复
感谢 pengdali(大力)一直的帮助
再加100分表示对帮助我的人表示感激
newp 2003-05-15
  • 打赏
  • 举报
回复
我现在是做实际的字段,然后用公式计算填充
没有按照Create table (a int,b int,c as a+b)这样来做
而是
Create table(a int,b int)
...
做到12月,上级要求要打印出每个月a+b的值
那么就insert字段c int
然后
update 工资表 set c=a+b where 日期='1月'
update 工资表 set c=a+b where 日期='2月'
update 工资表 set c=a+b where 日期='3月'
........
一直计算到12月
问题是我每次计算都是计算一批公式,如果这些公式有改动,那么以前月的计算数据肯定变掉,就是这个矛盾
newp 2003-05-15
  • 打赏
  • 举报
回复
计算字段的建立:
create table XX (a int,b int,c as a+b)

企业管理器-->新建表下面的公式 <<===就是你把公式写在设计表里

你是让我这样做还是让我别按照这样做?呵呵,我脑筋比较慢
-----------------------------------------------------------------------

update 表 set xx=新公式 where 时间='2003-3-1'

现在问题是我要从1月计算到12月
就是每个月的应发合计都要有
所以肯定要有这些:
update 表 set xx=新公式 where 时间='2003-1-1'
update 表 set xx=新公式 where 时间='2003-2-1'
update 表 set xx=新公式 where 时间='2003-3-1'
.......................
pengdali 2003-05-15
  • 打赏
  • 举报
回复
计算字段的建立:
create table XX (a int,b int,c as a+b)

企业管理器-->新建表下面的公式 <<===就是你把公式写在设计表里

这样是不行的,你应该用一个 应发合计 保存“当时”的应发合计就可以了

---------------------------------------------------
如果2003年01月工资不让计算,应发合计就出不来阿;如果让计算,如果存在其他的新公式会

把其他的数据也改掉 <<====怎么会呢?update 表 set xx=新公式 where 时间='2003-3-1'
你写where语句怎么会影响其他数据呢?
,矛盾阿~~~


newp 2003-05-15
  • 打赏
  • 举报
回复
有些不明白,能不能说清楚一些
我现在的步骤是:
1、从上月引入固定项目工资
2、录入变动项目工资
3、用预先设定的公式执行计算
如果有什么变动
1、更改公式
2、重新计算

to:liujianjun_(流星尔)
我确实是直接查询已经计算好的计算结果,而不是查询时再计算
现在问题是1月份的时候并没有需要增加"应发合计",而到了年底,xx上级部门有指示:打印一份1-12月分月的“应发合计”上报;这个1月份并没有预测,而到了12月份才有这个需求

to:pengdali(大力)
[2、你肯定不能用计算字段]
什么意思?
[4、你后面的 应发合计 是一个实际存在的列 我在上面都是告诉你应该把它变为一个存在的列而不是计算字段]
[存在的列]和[计算字段]什么区别?
pengdali 2003-05-15
  • 打赏
  • 举报
回复
1、我也是说横向呀
2、你肯定不能用计算字段
3、应为今天是 应发合计=应发工资+奖金 也许明天是 应发合计=应发工资-奖金
4、你后面的 应发合计 是一个实际存在的列 我在上面都是告诉你应该把它变为一个存在的列而不是计算字段
流星尔 2003-05-15
  • 打赏
  • 举报
回复
不会的。你的计算列不是在每次你查询的时候,给计算出来,而是通过一个实际的列保存起来。就是本月的数据,你要看计算列,也并不是再用公司重新计算一次。

这个公式什么时候用呢,是在你录入数据的时候,已经通过该公式运算好了,然后你要查询数据,只是直接对这些计算列操作就可以了。不重新计算。

在一月份的时候,就把应发合计列数据给计算出来,并存储进去。
newp 2003-05-15
  • 打赏
  • 举报
回复
up~~
newp 2003-05-14
  • 打赏
  • 举报
回复
不是,我说的是横向相加
比如
日期 应发工资 奖金
200301 500 100
现在要改成:
日期 应发工资 奖金 应发合计
200301 500 100
设定公式:应发合计=应发工资+奖金
如果2003年01月工资不让计算,应发合计就出不来阿;如果让计算,如果存在其他的新公式会把其他的数据也改掉,矛盾阿~~~
pengdali 2003-05-14
  • 打赏
  • 举报
回复
你要把计算的合计用一个列存储起来如:

实发金额

这样你只要对你的合计列进行汇总就OK了
hooboo 2003-05-14
  • 打赏
  • 举报
回复
加一个标识字段.比如 tag 是1表示是用旧标准计算.2 用新标准计算.
newp 2003-05-14
  • 打赏
  • 举报
回复
感谢大力帮助!
如果不允许改动,那么到了年底,用户要打印每个月的应发工资+奖金
必然要加一个新字段:应发合计,然后设定公式:应发合计=应发工资+奖金
然后重新计算
类似的问题怎么解决?
pengdali 2003-05-14
  • 打赏
  • 举报
回复
第一个表说明对于所有 Microsoft® SQL Server™ 2000 版本都相同的最大容量。第二个和第三个表说明因 SQL Server 2000 的版本和操作系统的不同而异的容量。

下表说明在 Microsoft SQL Server 数据库中定义的,或在 Transact-SQL 语句中引用的各种对象的最大值(数量或大小)。下表不包含 Microsoft® SQL Server 2000™ Windows® CE 版。

最大值(数量或大小)
对象 SQL Server 7.0 SQL Server 2000
批处理大小 65,536 * 网络数据包大小1 65,536 * 网络数据包大小1
每个短字符串列的字节数 8,000 8,000
每个 text、ntext、或 image 列的字节数 2 GB-2 2 GB-2
每个 GROUP BY、ORDER BY的字节数 8,060
每个索引中的字节数 900 9002
每个外键的字节数 900 900
每个主键的字节数 900 900
每行字节数 8,060 8,060
存储过程源文本中的字节数 批处理大小之较小者或者 250 MB 批处理大小之较小者或者 250 MB
每个数据表的聚集索引数 1 1
GROUP BY、ORDER BY 中的列数 只受字节数限制
GROUP BY WITH CUBE 或 WITH ROLLUP 语句中的列数或表达式数目 10
每个索引的列数 16 16
每个外键的列数 16 16
每个主键的列数 16 16
每个基础数据表的列数 1,024 1,024
每个SELECT 语句的列数 4,096 4,096
每个INSERT 语句的列数 1,024 1,024
每个客户端的连接个数 已配置连接的最大值 已配置连接的最大值
数据库大小 1,048,516 TB3 1,048,516 TB3
每个 SQL Server 实例的数据库个数 32,767 32,767
每个数据库的文件组个数 256 256
每个数据库的文件个数 32,767 32,767
文件大小(数据) 32 TB 32 TB
文件大小(日志) 4 TB 32 TB
每个数据表的外键表引用 253 253
标识符长度(以字符计) 128 128
每台计算机的实例数 暂缺 16
包含 SQL 语句的字符串长度(批处理大小) 65,536 * 网络数据包大小1 65,536 * 网络数据包大小1
每个连接的锁数 每个服务器的最大锁数 每个服务器的最大锁数
每个 SQL Server 实例的锁数 2,147,483,647(静态)
SQL Server 40% 的内存(动态) 2,147,483,647(静态)
SQL Server 40% 的内存(动态)
嵌套存储过程层数 32 32
嵌套子查询 32 32
嵌套触发器层数 32 32
每个数据表的非聚集索引个数 249 249
SQL Server 实例中同时打开的对象个数4 2,147,483,647(或可用内存) 2,147,483,647(或可用内存)
每个数据库中的对象个数 2,147,483,6474 2,147,483,6474
每个存储过程的参数个数 1,024 1,024
每个数据表的 REFERENCE 个数 253 253
每个数据表的行数 受可用存储资源限制 受可用存储资源限制
每个数据库的数据表个数 受数据库中的对象个数限制4 受数据库中的对象个数限制4
每个 SELECT 语句的数据表个数 256 256
每个数据表的触发器个数 受数据库中的对象个数限制4 受数据库中的对象个数限制4
每个数据表的 UNIQUE 索引个数或约束个数 249个非聚集索引和 1 个聚集索引 249个非聚集索引和 1 个聚集索引


1 网络数据包大小是表格格式数据方案 (TDS) 数据包的大小,该数据包用于应用程序和关系数据库引擎之间的通讯。默认的数据包大小为 4 KB,由 network packet size 配置选项控制。
2 在 SQL Server 2000 中,任何键的最大字节数不能超过 900。可以使用可变长度的列来定义键,只要在这种列中不插入数据超过 900 字节的行,其最大大小就可以在 900 以上。有关更多信息,请参见索引键的最大值。
3 当使用 SQL Server 2000 Desktop Engine 或 Microsoft 数据引擎 (MSDE) 1.0 时,数据库的大小不能超过 2 GB。
4数据库对象包括所有的表、视图、存储过程、扩展存储过程、触发器、规则、默认值及约束。一个数据库中所有对象的总数不得超过 2,147,483,647。


说明 SQL Server 2000 中文版不支持英文版的 NT 4.0 企业版。

SQL Server 2000 版本支持的最大处理器数
下表列出各 SQL Server 2000 版本中的数据库引擎在对称多处理 (SMP) 计算机上能够支持的处理器数。




操作系统 企业版 标准版 个人版 开发版 Desktop Engine SQL Server CE 企业评估版
Microsoft Windows® 2000 DataCenter 32 4 2 32 2 暂缺 32
Windows 2000 Advanced Server 8 4 2 8 2 暂缺 8
Windows 2000 Server 4 4 2 4 2 暂缺 4
Windows 2000 Professional 暂缺 暂缺 2 2 2 暂缺 2
Microsoft Windows NT® 4.0 Server 企业版 8 8 2 8 2 暂缺 8
Windows NT 4.0 Server 4 4 2 4 2 暂缺 4
Windows NT 4.0 Workstation 暂缺 暂缺 2 2 2 暂缺 2
Microsoft Windows 98 暂缺 暂缺 1 使用 Desktop Engine 1 暂缺 暂缺
Microsoft Windows CE 暂缺 暂缺 暂缺 暂缺 暂缺 1 暂缺


SQL Server 2000 版本支持的最大物理内存量
下表列出各 SQL Server 2000 版中的数据引擎能够支持的最大物理内存量或 RAM。

操作系统 企业版 标准版 个人版 开发版 Desktop Engine SQL Server CE 企业评估版
Windows 2000 DataCenter 64 GB 2 GB 2 GB 64 GB 2 GB 暂缺 64 GB
Windows 2000 Advanced Server 8 GB 2 GB 2 GB 8 GB 2 GB 暂缺 8 GB
Windows 2000 Server 4 GB 2 GB 2 GB 4 GB 2 GB 暂缺 4 GB
Windows 2000 Professional 暂缺 暂缺 2 GB 2 GB 2 GB 暂缺 2 GB
Windows NT 4.0 Server 企业版 3 GB 2 GB 2 GB 3 GB 2 GB 暂缺 3 GB
Windows NT 4.0 Server 2 GB 2 GB 2 GB 2 GB 2 GB 暂缺 2 GB
Windows NT 4.0 Workstation 暂缺 暂缺 2 GB 2 GB 2 GB 暂缺 2 GB
pengdali 2003-05-14
  • 打赏
  • 举报
回复
主要看数据量,一般一年一个表
你可以做分区视图:
create table [2002年数据] (编号 int,年 int check(年=2002) default 2002,数据 int,primary key(编号,年))

create table [2003年数据] (编号 int,年 int check(年=2003) default 2003,数据 int,primary key(编号,年))

create view 所有数据 as
select * from [2002年数据]
union all
select * from [2003年数据]
go

如果是一年一个表,那么如果用户用5月份的公式去重新计算1月份工资(公式已经改动)怎么办?不允许操作?

不可以改动,比如:当时你只得了9000块工资,那到5月份公式一改 ,你得了1000000块,到时说你贪污了。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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