В данный момент я занят использованием 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
.