2

Multi-арендатор federattion на первичный ключ

Вопрос:

Для многопользовательских одной разделением базы данных а - если поле tenantid быть включены в первичный ключ (это было бы создать составной ключ для прикладной таблицы), а затем кластерный индекс или может ли tenantid быть включенным в кластеризованный индекс и не быть частью первичного ключа - для поддержки будущих возможностей лазурной федерации?


Контекста/Общие сведения:

Я предпочитаю не делать федеративный (tenantid) часть первичного ключа, потому что я буду делать использование EF5 (или даже выпустил версию) и OData с веб-API, и я понимаю, что работа в библиотеках EF и OData станет сложнее с составными ключами

Я не читаю явно, где мне нужно, чтобы часть объединенного ключа первичного ключа компо ключ сайта

Мне не нужно будет объединяться, чтобы начать, но если мне нужно масштабировать, мне нужен вариант.

Обратите внимание, что я собираюсь использовать GUIDs только потому, что федерация не будет принимать столбец Идентичность как первичные ключи (другая длинная тема, которая не имеет отношения к этому вопросу)


Пример:

Таблица: Наниматель Первичный ключ (ы): TenantID (GUID) кластерного индекса: TenantID

С:

Таблица: Клиент Первичный ключ (ы): CustomerID (GUID) внешнего ключа (ы): TenantID (GUID) Кластерный индекс: Клиент, TenantID

Или:

Таблица: Клиент Primary Ключ (ы): Заказчик, Арендатор (Составной первичный ключ) (GUID) внешнего ключа (ы): TenantID (GUID) Кластерный индекс: Клиент, TenantID


Ссылка:

Ниже приводится выдержка из Windows Azure Federation Guidelines and Limitations ...

таблицы объединения имеют следующие ограничения: Федерации столбцы из таблицы объединения может содержать только данные, которые подтверждают члену федерацию range_low включительно и range_high эксклюзив.

Тип данных столбца федерации должен точно соответствовать типу данных, определенному в определении федерации.

Все уникальные и кластерные индексы в объединенной таблице должны содержать столбцы федерации. Порядок, в котором колонка федерации отображается в индексе, может отличаться от порядкового номера ключа в федерации.

Значения столбцов федерации не могут быть обновлены до значений вне диапазона членов федерации.

Столбец федерации не может быть постоянным или неустановленным вычисленным столбцом.

Индексированные представления не поддерживаются членами федерации.

Столбцы федерации не могут быть NULLable.

Все ограничения внешнего ключа для объединенных таблиц должны включать столбцы федерации как для реферера, так и для ссылочных таблиц в том же порядковом номере внешнего ключа. Ссылочные таблицы не могут иметь отношения с внешним ключом с объединенными таблицами. Федеративные таблицы могут иметь отношения внешних ключей с справочными таблицами без ограничений.

Вы можете удалить таблицы, созданные с помощью предложения FEDERATED ON в обычном режиме. Вы также можете использовать ALTER TABLE для изменения всех свойств федеративной таблицы, кроме атрибутов федерации, таких как ключ федерации. Чтобы изменить ссылочную таблицу в объединенную таблицу или объединенную таблицу в справочную таблицу, вы должны создать новые таблицы с требуемыми свойствами и удалить существующую таблицу.

Когда таблица отмечена STATISTICS_NORECOMPUTE, операции объединения, такие как SPLIT, не делают недействительными или пересчитывают статистику. Это может привести к возникновению проблем плана выполнения после операций повторного разбиения, таких как SPLIT.

члены объединения не поддерживают свойство идентичности членов

Федеративные не поддерживают тип данных метки времени и rowversion.

ответ

2

IMHO, использование Tenantid является внутренним для приложения для идентификации данных на основе арендаторов. Ниже будет достаточно

Таблица: Customer Первичного ключ (ы): CustomerID (GUID) внешний ключ (ы): TenantID (GUID) кластерный индекс: Клиент, TenantID

Я выигрыш видеть любого действительные причины, чтобы tenantid был частью составного первичного ключа. Кроме того, через федерацию мы идентифицируем только арендатора и его данные.

Следовательно, вы можете очень хорошо иметь TenantId в качестве внешнего ключа/индекса. Поделитесь своими мыслями по этому поводу.

+0

У меня создалось впечатление, что у вас должен быть ключ «splitting/sharding/federate» - при разбиении базы данных - в каждой таблице, которую вы хотите принести в недавно образованную базу данных. Например, если у меня есть таблица «Клиенты и арендаторы», и я хочу объединить один Tenant и его клиентов, мне нужен TenantId в таблицах TenantsId PK и Customers (CustomerId PK, TenantId PK, FK). – Aaron

+1

Понимание заключается в том, что, когда вы предоставляете осколок на основе арендаторов, базовая таблица, которую мы используем для идентификации арендатора, будет содержать данные арендатора, а оштукатуренный дБ по-прежнему будет содержать арендатора. Этот арендатор должен дать нам возможность провести различие между арендатором и его суб-арендатором, который может предпочесть использовать один и тот же родительский дБ вместо своих собственных. – Saravanan

+0

Пример: если арендатор находится в нас, ребенок-арендатор, такой как CA, NY, WA, может использовать общий db арендатора, а не собственный. Надеюсь, это понятно ... – Saravanan

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