Новый вопрос SQL: существует ли эквивалент внешнего ключа для ссылки на столбцы или логично хранить имена столбцов в виде строк в другой таблице?

Отказ от ответственности: я новичок в SQL, просто открываю для себя большие возможности sqlite, встроенные в приложения.

Я разрабатываю небольшую базу данных для приложения, которое в основном обрабатывает хранилище данных для построения графиков. Скажем, у меня есть несколько таблиц данных приборов (по одной для каждого типа приборов) со столбцами для каждого поля данных, таких как давление, температура, влажность и т. д. Я хотел бы объединить эти таблицы данных, вытащить имена столбцов и назначить более удобочитаемый столбец «описание», доступный пользователю для выбора независимых/зависимых переменных для построения графика. Получить имена столбцов в sqlite достаточно просто, но я не уверен, следует ли мне хранить полученные имена (и более длинные описания) в виде другой таблицы в базе данных или в каком-либо списке в приложении. Если бы это была другая таблица в базе данных, я думаю, мне пришлось бы хранить имя столбца в виде строки... если нет какого-либо способа сослаться на столбец в SQL? Я не уверен, есть ли эквивалент внешнего ключа для столбцов, или это просто признак плохой структуры базы данных, требующей реструктуризации.

Спасибо за любые предложения, стек overflowers.


person bobasaurus    schedule 08.02.2010    source источник


Ответы (2)


Существуют способы выполнять самоанализ в SQL и извлекать имена таблиц и столбцов, но вы, вероятно, не хотите делать это таким образом, и детали реализации этого сильно зависят от вашей конкретной СУБД.

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

person Alison R.    schedule 08.02.2010
comment
Это звучит как хорошее решение. Хэш был бы быстрым способом сопоставления имен столбцов с лучшими описаниями переменных, которые я мог бы затем поместить в параметры выбора данных графического интерфейса (возможно, в виде поля со списком или что-то в этом роде). - person bobasaurus; 08.02.2010

То, что вам нужно, иногда называют «словарем данных». Если СУБД не предоставляет средства аннотирования, вам потребуется смоделировать их, и это, вероятно, будет включать в себя создание таблицы с именами таблиц, а также именами столбцов в ней. Это вполне разумно сделать.

Имейте в виду трудности с отслеживанием изменений имен таблиц и добавленных или удаленных столбцов; встроенные средства отслеживают только данные в системном каталоге (информация о «словаре данных», которая нужна СУБД для отслеживания того, что происходит) и не будут отслеживать то, что находится в вашей таблице.

person Jonathan Leffler    schedule 08.02.2010
comment
Да, я вижу, что сохранение целостности этой новомодной таблицы может быть проблематичным при добавлении или удалении инструментов. Спасибо за отзыв. - person bobasaurus; 08.02.2010