我在SQL中有一张表,其中保存着来自iFix SCADA系统的告警数据,其设计如下:
CREATE TABLE [dbo].[FIXALARMS](
[ALM_ID] [int] IDENTITY(1,1) NOT NULL,
[ALM_NATIVETIMEIN] [datetime] NOT NULL,
[ALM_PHYSLNODE] [char](8) NOT NULL,
[ALM_TAGNAME] [varchar](32) NOT NULL,
[ALM_VALUE] [varchar](16) NOT NULL,
[ALM_MSGTYPE] [varchar](8) NOT NULL,
[ALM_DESCR] [varchar](128) NOT NULL,
[ALM_ALMSTATUS] [varchar](4) NOT NULL,
[ALM_ALMPRIORITY] [varchar](8) NOT NULL,
[ALM_ALMAREA] [varchar](32) NOT NULL,
)
SCADA是指定列名和数据类型,并且没有其他选项将数据分割成多个表。基本上,我将被迫以这种格式接收信息,这已经变得很痛苦,因为我的许多查询都在对数据进行多个like和字符串比较,而这些数据实际上应该是id的。
现在,我想将此表规范化并拆分为多个具有键关系的表,以节省数据库空间,提高查询性能并增加一点灵活性。
最好使用数据库触发器来实现这一目标吗?数据库每天以约40Mb/天(~300k行)的速度增长,我缺乏SQL经验,所以我担心在添加条目时会给服务器增加额外的负载。相反,我应该使用代理程序定期清理表格吗?还有其他我可能不知道的选择吗?
FIXALARMS
作为视图,并在视图上使用INSTEAD OF INSERT
触发器将数据切分到适当的表中。 (我还要指出,这种方法会导致疯狂,但它说你可以在我得到的这本新书的第666,666页上正确地执行它,名为“Necronomicon For Dummies”...)。 - Bob Jarvis - Слава Україні