我在SQL Server中学习分区表,我遇到了这个问题:我有2个链表 - 父和子。其中一个(或者甚至两个)是一个分区表。当我实现分区视图时,我需要在其中包含2个相同的列 - 引用父表(来自子)的列和被引用的主键(来自父)?
自从MSDN说:以来,我一直对它喋喋不休列规则:
每个成员表中的所有列都必须包含在选择列表中。 SELECT * FROM是可接受的语法。
但是视图应该使(链接)表的表示更容易,因此并不是所有列都应该包含在视图中。
在我的情况下,根据MSDN,我必须将两个表的所有列都包含在视图中(其中2个是相同的)。在我看来,这不是一个非常合理的解决方案。
例如:
数据库1:
create table manufacturer
(
id int,
manufacturer_name varchar(35),
PRIMARY KEY (id),
CONSTRAINT CHK_manufacturer_id
CHECK (id < 1000)
);
create table product
(
pid int,
product_name varchar(35),
mid int,
PRIMARY KEY (pid),
CONSTRAINT CHK_product_pid
CHECK (pid < 1000),
CONSTRAINT FK_product_mid
FOREIGN KEY (mid)
REFERENCES manufacturer(id)
);
数据库2:
Same tables with CHECK constraints (id >= 1000)
查看:
create view dist_view as
select *
from db1.product p1
inner join db1.manufacturer m1 on p1.mid = m1.id
UNION ALL
select *
from db2.product p2
inner join db2.manufacturer m2 on p2.mid = m2.id
所以视图看起来像
pid | prod_name | mid | id | manufact_name
和mid = id。
在我看来,这样的观点与使用视图的主要优点相矛盾 - 表的简单表示。所以我希望有这样的观点:
(pid) | prod_name | manufact_name
我该如何解决这个问题?
答案 0 :(得分:1)
首先,您可能不应该费心学习分区视图。正确的分区方法是使用分区表而不是视图。
在documentation中重复此操作。例如:
注意强>
将数据本地分区到一台服务器的首选方法是 通过分区表。有关更多信息,请参阅分区 表和索引。
(我注意到您的查询都在一台服务器上。)
其次,{em}基础表上的union all
创建了分区视图。您正在使用join
,因此这只是一个常规视图。
我建议您重新评估数据结构,并考虑分区表而不是分区视图。