Имитация имен переменных столбцов в sqlite - PullRequest
3 голосов
/ 19 июня 2010

Я хочу сохранить записи (набор пар ключ => значение) в базе данных, но ключи различаются от записи к записи.

Я думал о сохранении с двумя таблицами, (1) ключей для каждой записи и (2) значений конкретных ключей для каждой записи, где записи имеют общее поле идентификатора в обеих таблицах, но я не уверен как получить записи как пары ключ => значение в SQL с такой конфигурацией.

Есть ли лучший метод? Если это невозможно в sqlite, возможно ли это в mysql? Спасибо!

Ответы [ 2 ]

4 голосов
/ 19 июня 2010

Звучит так, как будто вы ищете модель Entity-Attribute-Value .

Альтернативой является создание разных таблиц для разных типов объектов или создание таблицы со столбцомдля каждого возможного ключа и установите значение NULL для сущностей, у которых нет этого ключа.

Возможно, вы захотите взглянуть на презентацию Билла Карвина SQL Antipatterns, где он рассказывает о плюсах и минусах модели EAV и предлагает возможные альтернативы.Соответствующая часть начинается со слайда 16.

1 голос
/ 19 июня 2010

@ Марк Байерс прав, это модель EAV.Вы должны прочитать Bad CaRMa , прежде чем идти темным путем.Это история о том, как этот дизайн базы данных практически уничтожил компанию.

В реляционной базе данных каждая строка в отношении должна содержать одинаковые столбцы.Это часть определения для отношения .Это верно в SQLite, MySQL или любой другой реляционной базе данных.

Также см. Мою презентацию Практические объектно-ориентированные модели в SQL или мою книгу SQL Antipatterns , вя покажу проблемы, вызванные моделью EAV.

Если вам нужны переменные столбцы для каждой сущности, вам нужна нереляционная база данных.Существуют ориентированные на документы базы данных, такие как CouchDB или MongoDB , которые завоевывают популярность.

Или попробуйте Berkeley DB , если вы хотите встраиваемый кододнопользовательское решение, такое как SQLite.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...