Правильный способ использования базы данных для государства

1

Я хотел бы отслеживать некоторые работы с использованием базы данных, используя такие таблицы, как State и Status. Каждый Status таблица имеет FK к State. Действительный статус может быть чем-то вроде "transferring", и это состояние может быть "активным" или "завершенным". Будет третий стол (возможно, StatusEvent). Я использую Entity Framework 6.0 для сопоставления с базой данных.

Одна вещь, которую я пытаюсь понять, - правильно представлять эти состояния и статусы в моем коде С#. Например, могут быть следующие состояния:

StateId    Name
1          active
2          complete
3          error

В моем коде я хочу установить состояние в состоянии "активно". Я мог бы найти StateId, который соответствует тексту "active", а затем использовать его. Может быть, сделать это немного безопаснее с ToLower() или что-то еще. Я мог бы также сохранить список идентификаторов состояния. Что-то вроде const int Active = 1. Но тогда мне нужно убедиться, что в db ничего не меняется...

В конце я хочу иметь возможность вызвать метод типа SetStateOnStatus(int statusId, State state).

Я заглянул в материал Enum из объекта framework-, кажется, не слишком полезен, поскольку описания состояний находятся только в коде, а db просто содержит int. Мне нужно иметь эти описания в другой таблице, чтобы позже я мог запросить базу данных. Может, я что-то упустил?

Итак, каков правильный способ сделать это?

  • 1
    Таблицы поиска - довольно распространенная практика в базах данных SQL. Они являются эквивалентом базы данных Enum.
  • 0
    Связанный: codemeek.blogspot.com/2013/03/…
Показать ещё 1 комментарий
Теги:
entity-framework

3 ответа

1

Как отметил Роберт, полезно использовать таблицы поиска. Вы можете создать таблицу valid_status и valid_state, где вы можете пополнить свои пользовательские значения, как вы упомянули. Когда вы вставляете статус, получите его из таблицы состояния. Аналогичным образом вы можете получить stateid вместо того, чтобы передавать как жестко закодированное значение.

1

Вам действительно нужен государственный стол? Если значения в состоянии будут исправлены, вы можете создать перечисление, подобное тому, которое вы указали в коде. (Целые числа, сопоставленные с ними, будут делать - public enum State {Active (1),..;}) Это сэкономит ваше время, так что вам не нужно делать вызов базы данных.

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

Когда вы вызываете setStateOnStatus (..), вы можете сделать вызов базы данных, сохранить информацию там.

Если значения в состоянии будут меняться часто, то я думаю, будет иметь смысл иметь таблицу состояний

  • 0
    Да, жестко определенные значения, перечисление идеально; звучит как идеально подходит здесь. Иногда, кроме того , полезна таблица для добавления дополнительных метаданных и для использования в качестве внешнего ключа (в некоторых отношениях проще редактировать, чем ограничение); все зависит от того, определяются ли новые значения разработчиками или обычными пользователями
  • 0
    Я думаю, что мне нужна таблица состояний ... например, кому-то еще может понадобиться запросить базу данных по элементам, где state = 'active'. Например, через инструмент BI.
Показать ещё 1 комментарий
0

Поэтому я не буду отмечать это как ответ, так как я не знаю, было ли это наилучшим образом. Но в итоге я использовал шаблон t4, используя что-то похожее на это (но не совсем так), чтобы генерировать перечисления при сохранении/запуске генерации шаблона. Затем я использовал эти перечисления для вызова метода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню