Как установить любой столбец в качестве первичного ключа в хранилище данных SQL Azure

Я пытаюсь установить один столбец в БД в качестве первичного ключа, но всегда получаю эту ошибку:

Принудительные уникальные ограничения не поддерживаются в хранилище данных SQL Azure. Чтобы создать необязательное ограничение уникальности, вы должны включить синтаксис NOT ENFORCED как часть вашего оператора.

Выполняя исследования и разработки, я обнаружил, что в хранилище данных Azure SQL нет концепции первичных и внешних ключей, тогда как мы можем это сделать в нем.

Любые идеи?


person shweta_kaushish    schedule 20.04.2018    source источник
comment
Связанная информация: dba.stackexchange.com/questions/187065/   -  person TheGameiswar    schedule 20.04.2018
comment
Хранилище данных SQL в настоящее время не поддерживает первичные и внешние ключи. Какой у вас вариант использования?   -  person Matt Usher    schedule 20.04.2018
comment
Я использую хранилище данных SQL, и мне нужно установить первичный ключ в одной таблице и подделать ключ в другой, тогда каков подход для этого.   -  person shweta_kaushish    schedule 23.04.2018
comment
Я читал, что вместо уникальных ключей в хранилище данных SQL Azure есть концепция идентификатора ... Любые предложения по поводу того же.   -  person shweta_kaushish    schedule 24.04.2018


Ответы (4)


Хранилище данных SQL Azure не поддерживает первичный ключ.

https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-tables-overview.

person DEEPAK LAKHOTIA    schedule 22.04.2018
comment
Это прямо здесь. DRI не поддерживается в Azure SQL DW. - person all2neat; 02.05.2018
comment
Отметьте его как ответ, если он ответил на ваш вопрос. - person DEEPAK LAKHOTIA; 03.05.2018
comment
Если azure sql dw не поддерживает первичные и внешние ключи, то как azure называет это реляционным, поскольку связь между таблицами устанавливается этими ключами? - person Naresh Joshi; 02.11.2018

‹Цитата>

Хранилище данных SQL Azure поддерживает следующие ограничения таблиц:

  • PRIMARY KEY поддерживается только тогда, когда используются NONCLUSTERED и NOT ENFORCED.
  • Ограничение UNIQUE поддерживается только при использовании NOT ENFORCED.

Источник: https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-table-constraints

person AecorSoft    schedule 27.10.2019

Я только что подписался на RSS-потоки StackOverflow на Synapse. Первым фидом был этот пост. Я думал, что это было недавно, но обратите внимание, что это было 2 года назад, @Lurifaxel только что отправил ответ 4 дня назад. Я научусь здесь работать ... в конце концов. :)

В этой теме ограничения базы данных, такие как первичные и внешние ключи, являются ресурсами для предотвращения нарушения целостности данных некорректным клиентским кодом. Это очень популярно (и почти обязательно) в базах данных OLTP.

В системах OLAP, где вы загружаете данные пакетами или потоками, вы обычно этого не хотите, потому что это замедляет процесс загрузки. Обычно вы полагаетесь на сценические таблицы и методы CTAS, которые будут отображать согласованную версию вашей таблицы.

OLTP-транзакции не должны рассматриваться в системе OLAP / BI, такой как Synapse. Это делает ограничения первичных и внешних ключей просто неактуальными и ненужными.

Если вам действительно нужно создать ограничение первичного ключа в таблице, пул Synapse может это сделать, но он не будет проверять данные, уже находящиеся в таблице. Только новые данные (вставка / обновление) будут проверяться на дублирование.

person Armando Lacerda    schedule 31.10.2020

Измените таблицу, чтобы создать необязательный и некластеризованный первичный ключ следующим образом:

-- Schema: sales
-- Table:  customer
-- primary key column: customerid
ALTER TABLE sales.customer
ADD CONSTRAINT PK_customer_customerid PRIMARY KEY NONCLUSTERED (customerid) NOT ENFORCED;

Имейте в виду, что вам нужно будет убедиться, что нет строк с повторяющимися значениями вручную! См. документы для получения дополнительной информации.

person Lurifaxel    schedule 27.10.2020