我可以使用触发器来创建列吗?

时间:2012-12-19 17:50:15

标签: sql sql-server key-value entity-attribute-value

作为Entity-Attribute-Value或Key-Value Pair表等反模式的替代方法,是否可以通过参数表上的INSERT触发器动态地将列添加到数据表中?

这是我的表格:

CREATE TABLE [Parameters]
(
    id int NOT NULL 
        IDENTITY(1,1) 
        PRIMARY KEY,
    Parameter varchar(200) NOT NULL,
    Type varchar(200) NOT NULL
)
GO

CREATE TABLE [Data]
(
    id int NOT NULL
        IDENTITY(1,1)
        PRIMARY KEY,
    SerialNumber int NOT NULL
)
GO

然后触发器将被放置在参数表上,由添加的新参数触发:

CREATE TRIGGER [TRG_Data_Insert]
    ON [Parameters]
    FOR INSERT 
AS BEGIN            
            -- The trigger takes the newly inserted parameter
            -- record and ADDs a column to the data table, using
            -- the parameter name as the column name, the data type
            -- as the column data type and makes the new column 
            -- nullable.
END
GO

这将允许我的数据挖掘应用程序获取要挖掘的参数列表,并且一旦挖掘它就可以存储该数据。它还允许用户动态添加新参数,而不必乱用SQL。

这可能吗?如果是这样,你会怎么做呢?

1 个答案:

答案 0 :(得分:4)

我认为动态添加列的想法将是一个滴答作响的定时炸弹,只是逐渐蔓延到SQL Server limits之一。

您还将把数据库设计交给用户,让您受其命名惯例和疯狂想法的支配。

所以尽管有可能,它是否比EAV表更好,对于下一个开发者来说,这对于你的程序来说至少是显而易见的?