作为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。
这可能吗?如果是这样,你会怎么做呢?
答案 0 :(得分:4)
我认为动态添加列的想法将是一个滴答作响的定时炸弹,只是逐渐蔓延到SQL Server limits之一。
您还将把数据库设计交给用户,让您受其命名惯例和疯狂想法的支配。
所以尽管有可能,它是否比EAV表更好,对于下一个开发者来说,这对于你的程序来说至少是显而易见的?