Database design 在Sybase中对空条目使用默认值

Database design 在Sybase中对空条目使用默认值,database-design,powerbuilder,ddl,sap-ase,Database Design,Powerbuilder,Ddl,Sap Ase,早上好 我对Sybase ASE 12中的默认值和空值有疑问。长话短说:我继承了一个非常古老的Sybase数据库以及位于其上的PowerBuilder前端。其中一个表包含多个具有默认值和NOTNULL约束的列。因此,每当没有提供值(注意:不是空值)时,PowerBuilder就会创建相应的insert/update语句,并且不会传递这些空字段的值,然后数据库会自动为这些空字段分配默认值。肉汁 现在,问题是:决定通过前端将审计添加到整个应用程序中(我知道这是个坏主意,但不是我的选择)。编写一个函数

早上好

我对Sybase ASE 12中的默认值和空值有疑问。长话短说:我继承了一个非常古老的Sybase数据库以及位于其上的PowerBuilder前端。其中一个表包含多个具有默认值和NOTNULL约束的列。因此,每当没有提供值(注意:不是空值)时,PowerBuilder就会创建相应的insert/update语句,并且不会传递这些空字段的值,然后数据库会自动为这些空字段分配默认值。肉汁

现在,问题是:决定通过前端将审计添加到整个应用程序中(我知道这是个坏主意,但不是我的选择)。编写一个函数是为了抽象审核过程,但问题是,它没有将任何用户条目视为空值,并在审核表中生成insert语句(也使用NOTNULL约束定义),为这些空列提供文本NULL。然后,Sybase会看到文本NULL,正如大家所知,将NULL视为一个值,而不是“no entry”

所以问题是:是否可以从数据库端将空条目默认为默认值?我已经考虑过触发器,但我希望我会幸运,并且会有某种形式的表级构造可以使用

谢谢你的时间和考虑

参考文献:
这个问题的一个很好的例子

见表7-1,页面中间部分。

我认为您需要使审计功能更加智能化。它应该只记录用户更改的列。这很容易通过
getitemstatus
确定。您可以使用
getitemstatus
的形式循环遍历列,该格式采用整数列编号。

我认为您需要使审核功能更智能。它应该只记录用户更改的列。这很容易通过
getitemstatus
确定。您可以使用
getitemstatus
的形式循环浏览列,该格式采用整数列编号。

谢谢您的回答。实际上,我现在这样做是为了防止审核未更改的行,但可以对其进行级别和列级别的粒度调整。理想情况下,我希望审计功能尽可能小,但是,因为它已经相当大,可能需要相当长的时间。但是,也许这确实是一条路要走。再次感谢。检查列的属性非常快。我们的框架的代码在每次加载数据窗口中的每个列控件时都会对其进行修改,并且不会对性能造成影响。通过向数据库发送更少的数据,您可能会在性能上领先。将未更改的列发送到数据库几乎肯定要比扫描DataWindow中的所有列花费更长的时间。我认为数据库会更好地针对这些事情进行优化,但我想象扫描列值只需要检查几个标志。我在考虑数据的传输时间。谢谢你的回答。实际上,我现在这样做是为了防止审核未更改的行,但可以对其进行级别和列级别的粒度调整。理想情况下,我希望审计功能尽可能小,但是,因为它已经相当大,可能需要相当长的时间。但是,也许这确实是一条路要走。再次感谢。检查列的属性非常快。我们的框架的代码在每次加载数据窗口中的每个列控件时都会对其进行修改,并且不会对性能造成影响。通过向数据库发送更少的数据,您可能会在性能上领先。将未更改的列发送到数据库几乎肯定要比扫描DataWindow中的所有列花费更长的时间。我认为数据库会更好地针对这些事情进行优化,但我想象扫描一个列值所涉及的仅仅是检查几个标志。我考虑的是数据的传输时间。