0

作为 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。

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

4

1 回答 1

4

我认为动态添加列的想法将是一个定时炸弹,只是逐渐向SQL Server 限制之一蔓延。

您还将把数据库设计交到用户手中,任由他们的命名约定和疯狂的想法摆布。

因此,虽然有可能,但它是否比 EAV 表更好,这对于下一个开发人员来说至少是显而易见的选择你的程序吗?

于 2012-12-19T18:02:23.103 回答