Просто чтобы прояснить ситуацию.
Наилучшим способом является столбец в каждой таблице, из которого выпадающий источник.
И вот почему ...
"Не следует ли мне беспокоиться о месте при сохранении данных в базе данных?"
Короткий ответ - нет.Более длинный ответ - это то, о чем вам следует беспокоиться, это производительность.Сосредоточение внимания на пространстве приведет вас к очень плохим вещам.
Плохие вещи, которые вы будете делать, если вас беспокоит пространство.
- Вы похороните смысл в Первичных Ключах.т.е. Smart Keys.
- Вы попытаетесь сохранить несколько значений в одном столбце.
- Вы будете слишком мало индексировать
- (Без сомнения, мы могли бы создать список из 50 плохих практик, которые экономят место)
предположим, что их 50магазины (выберите поле с 50 возможными значениями).В этом случае для хранения магазина по умолчанию необходимо 50 логических полей,
Ну, это ONE логический столбец.Он существует в каждом ряду.
Позвольте мне спросить вас об этом.Если вы создали таблицу с 1 столбцом даты и вставили 1 строку, сколько места вы бы использовали на диске?
Если бы вы сказали 7 или 8 байтов, то вы отключились примерно в 1000 раз.
Самая маленькая единица дискового пространства - это блок.Типичные блоки - 8 КБ (могут быть как 2 КБ, так и 32 КБ, в общем (здесь ничего не придираться, фактические пределы не важны))
Допустим, у вас есть блоки 8 КБваш 1 столбец, 1 строка таблицы занимает 8 КБ.Если вы вставите еще 999 строк, он все равно займет 8 КБ. (Опять же, нет придирки, есть накладные расходы на блок и на строку - это пример)
Так что в вашей таблице поиска с 50 именами магазинов вероятность того, что при добавлении 50 байтов к размерутаблица вынуждает вас расширяться от 1 блока до 2 - тонкая до нуля и совершенно неактуальная.
С другой стороны, ваша таблица по умолчанию наверняка займет как минимум один дополнительный блок.Но худшим ударом для PERFORMANCE является то, что ваш вызов для заполнения раскрывающегося списка потребует двух обращений в базу данных, одного для получения списка, одного для получения значения по умолчанию. (да, вы можете сделать это за один раз, но согласитесь)
Таким образом, вы сэкономили ровно ноль места и удвоили сетевой трафик.
Выпосмотрите, что я говорю.
Еще одна решающая причина перестать беспокоиться о космосе - это то, что вы отказываетесь от ясности.подумайте о разработчике, которого вы собираетесь нанять для запуска этого приложения.Когда он присоединяется к команде и просматривает базу данных, представьте два сценария.
- Там есть логический столбец с именем Default_value
- Есть таблица без связей с чем-либо, которая называется Default_Values
Вы просите его построить новый магазин с выпадающим списком для «магазина».
В сценарии 1 он находит таблицу хранилища, связывает раскрывающийся список с простым запросом таблицы и использует поле default_value для выбора начального значения.
В сценарии 2 без некоторого обученияКак он узнает, как искать отдельную таблицу?Возможно, он увидит таблицу, но к тому времени, когда вы нанимаете, у вашей модели данных теперь есть сотни таблиц.
Опять же, немного надумано, но суть очевидна.Ясность в базе данных хорошо, хорошо стоит байт на строку.
Технические вещи
Я не парень MySQL, но в Oracle нулевой столбец в конце строки не занимает дополнительного места.В Oracle я бы использовал Varchar2 (1) и пусть 'T' = Default, а остальные оставляем нулевым.Это будет влиять только на использование 1 общего байта, а не на строку.YMMV с MySQL, вы можете задать этот вопрос отдельно, если вы не можете Google ответить.
Но время для беспокойства об этом миллионы строк, а не сотни.Любая таблица, которая предоставляет выпадающий список, никогда не будет достаточно большой, чтобы начать беспокоиться о лишних байтах.