Как мне создать уникальное ограничение, которое также допускает нулевое значение с помощью fluent migrator?

Я хочу иметь уникальное ограничение для столбца, который я собираюсь заполнить идентификаторами GUID. Однако мои данные содержат нулевые значения для этих столбцов. Как создать ограничение, которое допускает несколько нулевых значений с помощью Fluent migrator, не нарушая уникального ограничения?

Я нашел обходной путь для SqlServer здесь. Таким образом, можно использовать IfDatabase FluentMigrator и выполнять необработанный SQL для SqlServer. Но я хотел бы найти решение, которое не зависит от системы.

SQL-серверное решение:

IfDatabase("sqlserver").Execute.Sql("
  CREATE UNIQUE NONCLUSTERED INDEX foo
  ON dbo.bar(key)
  WHERE key IS NOT NULL;
");

person Nicolas    schedule 08.07.2019    source источник


Ответы (1)


Эта функция — отфильтрованные индексы, частичные индексы и т. д. — сильно зависит от СУБД. Например, SQL Server и PostgreSQL имеют для него разный синтаксис, а MySQL его вообще не поддерживает.

Из этого следует, что, поскольку существуют СУБД, не поддерживающие такую ​​возможность, FluentMigrator не может предоставить такую ​​возможность в общих интерфейсах создания индексов. Однако он предоставляет гибкий интерфейс для того, что вы хотите сделать явно для SQLServer, как SqlServer.SqlServerExtensions.UniqueNullsNotDistinct.

person V0ldek    schedule 08.07.2019