SQL-таблица с одной строкой?
Какова точка (если таковая имеется) в наличии таблицы в базе данных с одной строкой?
Примечание. Я не говорю о возможности иметь только одну строку в таблице, но когда разработчик намеренно создает таблицу, предназначенную всегда иметь ровно одну строку.
Edit:
Пример налога с продаж является хорошим.
Я только что наблюдал в каком-то коде. Я просматриваю три разные таблицы, содержащие три разных типа сертификатов (a la SSL), каждая из которых имеет ровно одну строку. Я не понимаю, почему это не сделано в одну большую таблицу; Я предполагаю, что у меня что-то не хватает.
Ответы
Ответ 1
Я видел что-то подобное, когда разработчику было предложено создать таблицу конфигурации для хранения пар данных с именем-значением, которые должны сохраняться без частого изменения. В результате он создал таблицу с одной строкой со столбцом для каждой переменной конфигурации. Я бы не сказал, что это хорошая идея, но я могу, конечно, понять, почему разработчик сделал это с учетом его инструкций. Излишне говорить, что он не прошел обзор.
Я только что наблюдал в каком-то коде. Я просматриваю три разные таблицы, содержащие три разных типа сертификатов (a la SSL), каждая из которых имеет ровно одну строку. Я не понимаю, почему это не сделано в одну строку; Я предполагаю, что у меня что-то не хватает.
Это не похоже на хороший дизайн, если нет важных сведений, о которых вы не знаете. Если есть три части информации, которые имеют одинаковые ограничения, одинаковое использование и одну и ту же структуру, они должны храниться в одной таблице в 99% случаев. Это большая часть того, что таблицы для фундаментально.
Ответ 2
Для некоторых вещей вам нужна только одна строка - обычно данные конфигурации системы. Например, "текущая ставка налога на продажу". Это может измениться в будущем и поэтому не должно быть жестко запрограммировано, но вам обычно понадобится только один в любой момент времени. Такие данные должны быть в базе данных, чтобы запросы могли использовать их в вычислениях.
Ответ 3
Это не обязательно плохая идея.
Что делать, если у вас было какое-то глобальное состояние (скажем, логическое), которое вы хотели где-то хранить? И вы хотели, чтобы ваши хранимые процедуры могли легко получить доступ к этому состоянию?
Вы можете создать таблицу с первичным ключом, диапазон значений которого был ограничен точно одним значением.
Ответ 4
Одна строка похожа на одноэлементный класс. Цель: контролировать или управлять другим процессом.
Таблица одиночных строк может действовать как критический раздел или как детерминированный автомат (тип диспетчера, основанный на значениях строк)
Одиночная строка используется в таблице COMPANY_DESCRIPTION, чтобы получить согласованные данные об этой компании. Используйте полную букву компании и адресацию.
В одной строке используется полное значение, чтобы содержать фактическое значение, например НДС или дату или время, и т.д.
Ответ 5
Может быть полезно когда-нибудь подражать некоторым функциям, которые система базы данных не предоставляет. Я думаю о последовательностях в MySQL, например.
Ответ 6
Какова точка (если таковая имеется) в наличии таблицы в базе данных с одной строкой?
Реляционная база данных хранит вещи как отношения: кортежи данных, удовлетворяющие некоторому отношению.
Например, этот: "a VAT
этого большого процента действует в моей стране сейчас".
Если только один кортеж удовлетворяет этому отношению, то да, он будет единственным в таблице.
SQL
не может хранить переменные: он может хранить набор, состоящий из элемента 1
, это таблица с одной строкой.
Кроме того, SQL
- это язык, основанный на наборе, и для некоторых операций вам нужен поддельный набор только одной строки, например, для выбора постоянного выражения.
Вы не можете просто SELECT
из ничего в Oracle
, вам нужно предложение FROM
.
Oracle
имеет псевдоопределяемый dual
, который содержит только одну строку и только один столбец.
Однажды, давным-давно, он имел две строки (отсюда и название dual
), но потерял вторую строку где-то на пути к версии 7
.
MySQL
также псевдоопределяется, но MySQL
может выполнять выбор без предложения FROM
. Тем не менее, это полезно, когда вам нужен пустой набор строк: SELECT 1 FROM dual WHERE NULL
Я только что заметил в каком-то коде. Я просматриваю три разные таблицы, которые содержат три разных типа сертификатов (a la SSL
), каждая из которых имеет ровно одну строку. Я не понимаю, почему это не сделано в одну большую таблицу; Я предполагаю, что у меня что-то не хватает.
Это может быть своего рода сценарий "иметь все это или проиграть", когда все три сертификата необходимы сразу:
SELECT *
FROM ssl1
CROSS JOIN
ssl2
CROSS JOIN
ssl3
Если какой-либо, если сертификаты отсутствуют, весь запрос ничего не возвращает.
Ответ 7
Таблица с одной строкой может использоваться для хранения настроек уровня приложения, которые совместно используются для всех пользователей базы данных. "Максимально разрешенные пользователи".
Ответ 8
Я использую совершенно потрясающий плагин настроек rails для этого http://github.com/Squeegy/rails-settings/tree/master
Очень легко настроить и обеспечить хороший синтаксис:
Settings.admin_password = 'supersecret'
Settings.date_format = '%m %d, %Y'
Settings.cocktails = ['Martini', 'Screwdriver', 'White Russian']
Settings.foo = 123
Хотите список всех настроек?
Settings.all # returns {'admin_password' => 'super_secret', 'date_format' => '%m %d, %Y'}
Установите значения по умолчанию для определенных настроек вашего приложения. Это приведет к тому, что определенные параметры вернутся с указанным значением, даже если они не находятся в базе данных. Создайте новый файл в config/initializers/settings.rb со следующим:
Settings.defaults[:some_setting] = 'footastic'
Ответ 9
Если в таблице нет ограничений вставки для метки времени для управления версиями, тогда это звучит как плохая идея.
Ответ 10
Смешно... Я задал себе тот же вопрос. Если вы просто хотите сохранить какое-то простое значение, а ваш единственный метод хранения - это SQL-сервер, это в значительной степени то, что вам нужно сделать. Если мне нужно это сделать, я обычно создаю таблицу с несколькими столбцами и одной строкой. Я также видел пару коммерческих продуктов.
Ответ 11
Мы использовали таблицу с одной строкой в прошлом (не часто). В нашем случае эта таблица использовалась для хранения общесистемных значений конфигурации, которые обновлялись через веб-интерфейс. Мы могли бы пойти по пути простой таблицы имен/значений, но конечный клиент предпочел одну строку. Я лично предпочел бы последнее, но это действительно зависит от предпочтений, особенно если эта таблица никогда не будет иметь никаких отношений с другой таблицей.
Ответ 12
Если ваша база данных является вашим приложением, то, вероятно, имеет смысл хранить данные конфигурации, которые могут потребоваться хранимыми процедурами, реализующими бизнес-логику.
Если у вас есть приложение, которое может использовать файловую систему для хранения информации, я не думаю, что есть преимущество в использовании базы данных по XML или плоскому файлу, за исключением того, что большинство разработчиков теперь гораздо более хорошо разбираются используя SQL для хранения и извлечения данных, чем для доступа к файловой системе.
Ответ 13
В проекте, который я унаследовал, была создана такая таблица. Это было для данных конфигурации, и причина, по которой была дана, заключалась в том, что она выполнялась для очень простых запросов:
SELECT WidgetSize FROM ConfigTable
SELECT FooLength FROM ConfigTable
Хорошо. Мы преобразовали в общую таблицу конфигурации:
ID Name IntValue StringValue TextValue
Это хорошо послужило нашим целям.
Ответ 14
Я действительно не могу понять, почему это было бы лучшим решением. Он более эффективен, чтобы просто иметь какой-то конфигурационный файл, который будет содержать данные, которые будут в таблицах одной строки. Стоимость подключения к базе данных и запрос одной строки будет более дорогостоящей. Однако, если это будет какая-то конфигурация для логики базы данных. Тогда это будет иметь немного больше смысла в зависимости от типа базы данных, которую вы используете.
Ответ 15
CREATE TABLE VERSION (VERSION_STRING VARCHAR2(20 BYTE))
?
Ответ 16
Я использовал единую базу данных в базе данных SQLite в качестве счетчика на динамической веб-странице. Это самый простой способ, который я могу придумать, чтобы сделать его потокобезопасным (или безопасным процессом, чтобы быть точным). Но я не уверен, хорошая ли это идея.
Ответ 17
Я думаю, что лучший способ справиться с этими сценариями состоит в том, чтобы вместо использования базы данных использовать файл конфигурации (обычно это XML) или создать собственный файл конфигурации, который читается во время запуска приложения. Это займет всего несколько минут, чтобы написать код для чтения файла.
Преимущество заключается в том, что нет случайности добавления дополнительных значений для одной и той же переменной XML, и это отлично подходит для тестирования, потому что вам не нужно писать много кода для тестирования различных входных данных, простое изменение к текстовому значению и повторному запуску приложения.
Ответ 18
Использование для этого может состоять в том, чтобы сохранить текущую версию базы данных.
Если один из них хранит версии базы данных для изменений схемы, он должен находиться внутри самой базы данных.
В настоящее время я анализирую схему и обновляю ее, но думаю о переходе к управлению версиями. Если кто-то не имеет лучшей идеи.
Я использую vb.net и sql express