2016-01-09 2 views
1

Я изучаю таблицы разбиения на SQL Server, и я столкнулся с этой проблемой: у меня есть две связанные таблицы - родительский и дочерний. Один из них (или, возможно, оба) - это секционированная таблица. Когда я реализую секционированный вид, мне нужно включить в него 2 одинаковых столбца - тот, который ссылается на родительскую таблицу (от дочернего) и первичный ключ, на который ссылаются (от родителя)?Создать секционированный вид связанных таблиц

У меня troble с ним, так как 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 

Как это решить?

ответ

1

Во-первых, вы, вероятно, не должны беспокоиться о секционированных представлениях. Правильный способ создания разделов - использование секционированных таблиц, а не представлений.

Это повторяется в documentation. Например:

Примечания

Предпочтительный метод для разделения данных, локальных для одного сервера через секционированные таблицы. Для получения дополнительной информации см. Раздел «Занятые» Таблицы и индексы.

(И я отмечаю, что ваши запросы находятся на одном сервере.)

Во-вторых, распределяли вид создается union all на базе таблицы.Вы используете join s, так что это обычный просмотр.

Я бы предположил, что вы переоцениваете свои структуры данных и больше думаете о секционированных таблицах, чем секционированные представления.

Смежные вопросы