FYI: Я явно подразумеваю SQL Server 2000-8 и С#. Поэтому СУБД с поддержкой перечислений, такими как MySql, не является предметом моего вопроса.
Я знаю, что этот вопрос задавался несколько раз в SO. Но все же, я вижу в ответах, что используются разные подходы к хранению значений enum в db.
-
Сохранить enum как int в db и извлечь значение enum (или атрибут описания перечисления с помощью отражения) в коде:
это подход, который я обычно использую. Проблема в том, что когда я пытаюсь выполнить запрос из базы данных в SSMS, извлеченные данные трудно понять. -
Сохранить enum как строку (varchar) в db и вернуть обратно в int в коде.
На самом деле это может быть лучшим решением. Но (не смейтесь!) Это не так. Я не уверен в минусах. (За исключением большего пространства в db, которое обычно приемлемо). Что-нибудь еще против этого подхода? -
У вас есть отдельная таблица в db, которая синхронизируется с определением перечисления кода и создает отношение внешнего ключа между вашей основной таблицей и таблицей перечисления.
Проблема в том, что позже нужно добавить другое значение enum, и код, и db должны обновляться. Кроме того, могут быть опечатки, которые могут быть больно!
Итак, в общем случае, когда мы можем принять накладные расходы на db во втором решении, что было бы лучшим способом для хранения значений enum в db? Есть ли общее правило шаблона шаблона об этом?
Спасибо.