Что лучше: ограничение или ФК? Для столбца состояния - PullRequest
3 голосов
/ 29 декабря 2011

У меня есть приложение .NET, использующее Entity Framework 4 и SQL Server 2008 R2, где все уровни доступа к данным будут управляться EF4.

У меня есть таблица для финансовых транзакций: Транзакции со столбцом Status с возможными значениями: Открыто, Освобождено, Проверено, Закрыто.Эта таблица будет постоянно доступна для вставки, обновления и чтения.Мне нужна лучшая производительность, которую я могу достичь в этой таблице.

Стандартное решение - создать TransactionStatuses с Id (int), Name (varchar) и установить связь между Транзакции и TransactionStatuses .

Но теперь я думаю о другом решении: создать только таблицу Транзакции со столбцом Status (int) исоздайте ограничение, где Status принимает только 1,2,3,4.И в моем коде приложения создайте перечисление с Opened = 1, Released = 2, Verified = 3 и Closed = 4.

Это второе решение - лучшая альтернатива с точки зрения производительности?

Ответы [ 2 ]

4 голосов
/ 29 декабря 2011

Либо будет быстро;ограничение возможно проще для проверки, но базы данных сильно оптимизированы для очень быстрой проверки нарушений FK.

Учитывая эти два, я предпочитаю вариант FK с точки зрения обслуживания

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

Если данные никогда не изменятсятогда любой подход вполне жизнеспособен без ущерба.

4 голосов
/ 29 декабря 2011

Если ваши TransactionStatuses являются неизменяемыми, и все, что вам требуется, - это одно значение (в данном случае, целое число, соответствующее значению enum), тогда да, я бы рекомендовал вам забыть дополнительную таблицу TransactionStatuses.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...