簡體   English   中英

在鏈接表上創建分區視圖

[英]Create partitioned view on linked tables

我正在學習SQL Server中的分區表,並且陷入了這個問題:我有2個鏈接表-父級和子級。 其中之一(或什至兩者)都是分區表。 當我實現分區視圖時,是否需要在其中包含2個相同的列-引用父表(來自子級)和被引用的主鍵(來自父級)的一列?

自從MSDN說:

列規則:

每個成員表中的所有列都必須包含在選擇列表中。 SELECT * FROM是可接受的語法。

但是視圖應該使(鏈接的)表的表示更加容易,因此並非所有列都應包含在視圖中。

就我而言,根據MSDN,我必須將兩個表的所有列都包含在視圖中(其中兩個是相同的)。 在我看來,這不是很合乎邏輯的解決方案。

例如:

數據庫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

中= ID。

在我看來,這樣的視圖與使用視圖的主要優勢(表的簡單表示)相矛盾。 所以我想有一個這樣的觀點:

(pid) | prod_name | manufact_name

我該如何解決?

首先,您可能不應該學習分區視圖。 進行分區的正確方法是使用分區表,而不是視圖。

文檔中重復此步驟。 例如:

注意

對一台服務器本地數據進行分區的首選方法是通過分區表。 有關更多信息,請參見分區表和索引。

(我注意到,您的查詢全部在一台服務器上。)

其次,通過union all 表來創建分區視圖。 您正在使用join ,所以這只是一個常規視圖。

我建議您重新評估數據結構,並多考慮分區表而不是分區視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM