Как лучше всего представить Константы (Перечисления) в Базе данных (INT по сравнению с VARCHAR)?

Я столкнулся с проблемой при переключении моего ответвления.

я сделал мерзавца, надевают текущее ответвление и затем попробованный к контролю новый, и это работало

git pull // on your old branch git checkout <new_branch>

5
задан jan 2 September 2009 в 16:11
поделиться

2 ответа

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

Например, предположим, что у нас есть поле, которое должно содержать, скажем, тип транзакции, и возможные значения: Продажа, Возврат, Обслуживание и Layaway. Я бы создал таблицу типов транзакций с кодом и описанием, сделал бы коды, например, «SA», «RE», «SV» и «LY», и использовал бы поле кода в качестве первичного ключа. Затем в каждой записи транзакции я размещал этот код. Это занимает меньше места, чем целочисленный ключ в самой записи и в индексе. То, как именно он обрабатывается, зависит от механизма базы данных, но он не должен быть значительно менее эффективным, чем целочисленный ключ. И поскольку это мнемоника, ее очень легко использовать. Вы можете выгрузить запись и легко увидеть, что это за значения, и, вероятно, запомнить, что есть какие. Вы можете отображать коды без перевода в пользовательском выводе, и пользователи могут их понять. Действительно, это может дать вам прирост производительности по сравнению с целочисленными ключами: во многих случаях аббревиатура удобна для пользователей - они часто хотят, чтобы аббревиатуры оставались компактными и избегали прокрутки - поэтому вам не нужно присоединяться к таблице транзакций чтобы получить перевод.

Я определенно НЕ буду хранить длинное текстовое значение в каждой записи. Как в этом примере, Я бы не хотел обходиться без таблицы транзакций и хранить «Layaway». Это не только неэффективно, но вполне возможно, что когда-нибудь пользователи скажут, что они хотят, чтобы это было изменено на «Разложенную распродажу» или даже на какое-то тонкое отличие, например, «Временная распродажа». Тогда вам нужно не только обновить каждую запись в базе данных, но и искать в программе все места, где встречается этот текст, и изменять его. Кроме того, чем длиннее текст, тем больше вероятность того, что где-то в строке программист неправильно напишет его и создаст непонятные ошибки.

Кроме того, наличие таблицы типов транзакций обеспечивает удобное место для хранения дополнительной информации о типе транзакции. Никогда и никогда не пишите код, который говорит: «Если любой код = 'A' или какой-либо код = 'C' или какой-либо код = 'X', то ...» Что бы ни отличает эти три кода от всех других кодов, поместите для него поле в таблице транзакций и проверьте это поле. Если вы скажете: «Ну, это все коды, связанные с налогами» или что-то еще, тогда хорошо, создайте поле с именем «tax_related» и установите его в значение true или false для каждого значения кода, в зависимости от ситуации. В противном случае, когда кто-то создает новый тип транзакции, он должен просмотреть все эти списки if / или и выяснить, в какие из них следует добавить этот тип, а в какие - нет. Я читал множество сбивающих с толку программ, в которых мне приходилось выяснять, почему некоторая логика применяется к этим трем кодовым значениям, но не к другим, и когда вы думаете, что четвертое значение должно быть включено в список, очень трудно сказать, является ли оно отсутствует, потому что он действительно чем-то отличается, или если программист допустил ошибку.

Единственный тип, который я не создаю таблицы перевода, - это когда список очень короткий, нет дополнительных данных, которые нужно хранить, и из природы вселенной ясно, что он вряд ли когда-либо изменится, поэтому значения можно безопасно жестко запрограммировать. Как истинный / ложный или положительный / отрицательный / ноль или мужской / женский. (И, эй, даже этот последний, как бы очевидный он ни казался, есть люди, настаивающие, чтобы мы теперь включали «транссексуалов» и тому подобное.)

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

и из природы вселенной ясно, что она вряд ли когда-либо изменится, поэтому значения можно безопасно жестко запрограммировать. Как истинный / ложный или положительный / отрицательный / ноль или мужской / женский. (И, эй, даже этот последний, как бы очевидный он ни казался, есть люди, настаивающие, чтобы мы теперь включали «транссексуалов» и тому подобное.)

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

и из природы вселенной ясно, что она вряд ли когда-либо изменится, поэтому значения можно безопасно жестко запрограммировать. Как истинный / ложный или положительный / отрицательный / ноль или мужской / женский. (И, эй, даже этот последний, как бы очевидный он ни казался, есть люди, настаивающие, чтобы мы теперь включали «транссексуалов» и тому подобное.)

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

и т.п.)

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

и т.п.)

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

4
ответ дан 14 December 2019 в 19:20
поделиться

Я бы сохранил строковое представление, так как его легко сопоставить обратно с перечислением и гораздо более стабильно. Использование ordinal () было бы плохим, потому что оно может измениться, если вы добавите новое перечисление в середину ряда, поэтому вам придется реализовать свою собственную систему нумерации.

С точки зрения производительности, все зависит от того, что перечисляет будет использоваться для, но, скорее всего, будет преждевременной оптимизацией разработать целое отдельное представление с преобразованием, а не просто использовать естественное представление String.

1
ответ дан 14 December 2019 в 19:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: