Разделить/объединить осколки, которые имеют «вложенные» ссылки на внешние ключи

В данный момент я занят использованием Azure Elastic Scale пример разделения/объединения для существующей базы данных моего клиента.

Я определил схему базы данных, поэтому можно выполнить разделение/объединение. Однако есть 1 вещь, которая дает мне ошибки. Это вложенные ссылки на шардлеты (идентификатор для разделения).

На странице документации примера разделения/слияния есть следующий пример кода для указания схемы базы данных:

// Create the schema annotations 
SchemaInfo schemaInfo = new SchemaInfo(); 

// Reference tables 
schemaInfo.Add(new ReferenceTableInfo("dbo", "region")); 
schemaInfo.Add(new ReferenceTableInfo("dbo", "nation")); 

// Sharded tables 
schemaInfo.Add(new ShardedTableInfo("dbo", "customer", "C_CUSTKEY")); 
schemaInfo.Add(new ShardedTableInfo("dbo", "orders", "O_CUSTKEY")); 

// Publish 
smm.GetSchemaInfoCollection().Add(Configuration.ShardMapName, schemaInfo); 

Этот код, вероятно, будет работать, потому что он довольно прост. Но что, если есть другая таблица, OrderLines, которая имеет от FK до Orders, которая, в свою очередь, имеет от FK до Customer.

Как определить схему в такой ситуации?

Нужно ли указывать ключ между orderlines и orders? Это имело бы смысл, я думаю.

// Sharded tables 
schemaInfo.Add(new ShardedTableInfo("dbo", "customer", "C_CUSTKEY")); 
schemaInfo.Add(new ShardedTableInfo("dbo", "orders", "O_CUSTKEY")); 
schemaInfo.Add(new ShardedTableInfo("dbo", "orderslines", "OL_ORDERKEY")); 

Причина, по которой я спрашиваю, заключается в том, что база данных, над которой я работаю, имеет много этих «вложенных» отношений с шардлетом, и я не уверен, как указать схему. Я уже заметил, что указывать их как ReferenceTableInfo не вариант, потому что таким образом инструментарий пытается вставить записи до того, как будет выполнено отношение FK между OrderLines и Orders.


person Jan_V    schedule 19.01.2015    source источник


Ответы (1)


Служба разделения/слияния будет отслеживать зависимости FK и перемещать таблицы в правильном порядке. Важно, чтобы даже таблица OrdersLines содержала ключ сегментации (ключ клиента), а затем она также должна содержать ключ заказа для обработки FK. Но этот ключ не обязательно должен быть частью SchemaInfo.

Однако в вашем определении таблицы OrdersLines ссылка FK будет представлять собой комбинацию Customer-key и Order-key.

person Stuart Ozer    schedule 24.01.2015
comment
Похоже, вы правы, я проверил это на примере проекта. Добавьте schemaInfo.Add(new ShardedTableInfo("OrderLines", "CustomerId")); в SchemaInfo и создайте новую таблицу с FK для таблицы Customer, столбцом CustomerId и FK для таблицы Orders, для составного ПК этой таблицы (OrderId и CustomerId) - person Jan_V; 26.01.2015