我有兴趣了解解决我发现自己面临的数据库问题的正确方法。
我有一张表(约45列),其中包含有关库存的信息,价格以及与其包装,折扣等相关的大量信息。
通过在多个地方构建TSQL查询,使用ADO(VB6)通过Web应用程序访问库存。
现在需要保留一个新表格,其中包含上述列的精简列表,以允许某些用户覆盖来自源的部分股票信息(主要是描述等)。
我遇到的问题是提出一种方法(可能)构建两个表的视图,以便软件仍然认为它正在与第一个表交谈(更改软件只是一个不行的)实际上它是由第二个修改的第一个表,也许是通过某种UNION。
举一个简单的例子,假设您有一个库存表:
CREATE TABLE Stock
(
id int NOT NULL,
ref varchar(20) NOT NULL,
short_description varchar(50) NOT NULL,
long_description varchar(255) NOT NULL,
...many other columns
)
和修正表如下:
CREATE TABLE StockAmendments
(
id int NOT NULL,
ref varchar(20) NOT NULL,
short_description varchar(50) NOT NULL
)
我们的想法是将Stock
重命名为StockSource
并构建一个名为Stock
的视图,该视图会修改StockSource
StockAmendments
(在这种情况下可能是{1}}不同的short_description
)。这样软件就不需要知道变化了。
这可能吗?
答案 0 :(得分:1)
这应该是可行的。我很久没有做过t-sql了,但是这样的话:
CREATE VIEW Stock
AS
SELECT
ss.id,
ss.ref,
iif(isnull(sa.short_description), ss.short_description, sa.short_description)) as short_description,
ss.long_description
FROM StockSource ss, StockAmendments sa
WHERE ss.id = sa.id AND ss.ref = sa.ref
有一点需要担心的是查询性能取决于索引等。如果这是一个问题,你可能最好根据StockSource创建一个真正的'Stock'表并在StockAmendments上设置触发器以更新'Stock 'table。
答案 1 :(得分:0)
是的,可以使用可更新的视图。
将Stock重命名为StockSource并构建可更新的视图Stock over StockSource和StockAmendments。这样您就不必对VB6代码进行任何更改。