在链接表上创建分区视图

Create partitioned view on linked tables

我正在学习 SQL 服务器中的分区 tables,但我遇到了这个问题:我有 2 个链接的 tables - parent 和 child。其中之一(或什至两者)是分区 table。当我实现分区视图时,我是否需要在其中包含 2 个相同的列 - 引用 parental table(来自 child)的列和被引用的主键(来自 parent)?

我遇到了麻烦,因为 MSDN 说:

Column Rules:

All columns in each member table must be included in the select list. SELECT * FROM is acceptable syntax.

但是视图应该使(链接的)table 的表示更容易,因此并非所有列都应包含在视图中。

在我的例子中,根据 MSDN,我必须将两个 table 的所有列都包含到一个视图中(其中 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.

在我看来,这样的视图与使用视图的主要优势——tables 的简单表示相矛盾。所以我想有这样的观点:

(pid) | prod_name | manufact_name

我该如何解决这个问题?

首先,您可能不应该费心学习分区视图。进行分区的正确方法是使用分区表,而不是视图。

这在 documentation 中重复。例如:

Note

The preferred method for partitioning data local to one server is through partitioned tables. For more information, see Partitioned Tables and Indexes.

(我注意到您的查询都在一台服务器上。)

其次,分区视图由 union allbase 表上创建。您正在使用 joins,所以这只是一个常规视图。

我建议您 re-evaluate 您的数据结构,并更多地考虑分区表而不是分区视图。