Intereting Posts
MySQL выбирает MAX (datetime), не возвращая максимальное значение Find_by_sql как область Rails Как использовать SQLBulkCopy в таблице с первичным ключом GUID и значением по умолчанию newsequentialid ()? Как изменить значения в столбцах с помощью SQLite? Oracle SQL для непрерывной группировки Синтаксическая ошибка при создании числового столбца SQL-запрос для группировки по максимальным наборам столбца, имеющего внутренние последовательные расстояния ниже порогового значения Построение динамического запроса (динамического оператора) в SSRS с использованием сложного запроса SQL-запросы с участием «для всех» Группа MySQL от SUM Как сделать строку целым числом и иметь 0 в случае ошибки в трансляции с PostgreSQL? MYSQL auto_increment_increment как вернуть последний вставленный (автоинкрементный) номер строки в HSQL? Преобразование даты в строку в Sqlite Специальные символы в имени таблицы MySQL

Как моделировать данные с неизвестными атрибутами?

Каковы хорошие способы моделирования данных, которые нужно будет запросить, но где невозможно полностью определить фронт?

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

Во всяком случае, дело в том, что мы не (и никогда не узнаем), что будет, пока оно не ударит нас. Какие подходы могут быть масштабируемыми и доступными для запросов?

Возможно, это полезно для базы данных, ориентированной на документы (MongoDB?) Или, возможно, какой-то шаблон проектирования можно применить к классической реляционной базе данных?

Вы можете сделать это в чистой реляционной базе данных и наслаждаться скоростью и мощью реляционных баз данных.

Вам нужно использовать Шестой нормальный вид, правильный метод с полной целостностью и контролем.

EAV – это подмножество 6NF без Integrity или control и обычно очень плохо реализовано.

Мои ответы на эти вопросы дают полное представление о предмете. Последний из них особенно длинный из-за контекста и аргументов.

Ответ EAV-6NF One
EAV-6NF Ответ Два
EAV-6NF Ответ Три

Все базы данных должны со временем развиваться. Если у вас есть правильные люди и организация на месте, то у вас не должно возникнуть проблемы с добавлением новых атрибутов в модель по мере их возникновения.

Вы можете применить модель значения атрибута Entity, но это PITA в рельсах; Я использовал MongoDB, и он отлично подходит для вас.

Если вы используете Rails, вы можете использовать serialize :column_name в своей модели, и он будет успешно сохранять большинство объектов без какой-либо дополнительной работы. Если вы не думаете, что вам понадобится база данных NoSQL без схемы, это, вероятно, самая простая вещь, которую вы можете сделать, чтобы получить эту функциональность.

 class Country << ActiveRecord::Base serialize :data def add_statistic(name, value) data[name] = value end def get_statistic(name) data[name] end end 

Эти методы несколько лишние; они там, чтобы показать вам пример.

Самый большой недостаток этого типа системы – если вам нужно искать или запрашивать на основе этих вещей. В конце концов, Rails не будут обрабатывать Country.find_by_win_loss_record_of_national_basketball_team .