Rails: Как вы обрабатываете динамические атрибуты в базе данных? - PullRequest
4 голосов
/ 11 июля 2009

Если вы сталкиваетесь с сайтами объявлений, такими как craigslist, oodle, kijiji, ... все объявления, когда вы публикуете объявление, они показывают разные поля формы в зависимости от выбранной категории. Например, если вы публикуете объявление об автомобиле, оно показывает марку, модель, интерьеры и т. Д. Как вы думаете, как обрабатываются данные в базе данных?

Как вы думаете, они создают отдельную таблицу для каждого типа объявлений / или все это одна таблица "Объявления"? Если данные обрабатываются с использованием одной таблицы (STI), для каждого сценария (типа классифицированного) должны быть столбцы, и не все поля могут использоваться для каждого классифицированного.

Каков наилучший способ разработки объектов ActiveRecord, которые бы обрабатывали подобный сайт объявлений?

Ответы [ 2 ]

1 голос
/ 12 июля 2009

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

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

0 голосов
/ 11 июля 2009

У них, вероятно, есть отдельные таблицы. Хотя все они являются классификацией и являются «категориями» для пользователя, как вы говорите, данные сильно отличаются, и я подозреваю, что они хранятся отдельно из-за этого. Не было бы никакого реального преимущества (о чем я могу думать), чтобы хранить их все в одном большом столе, когда большую часть времени люди будут запрашивать отдельный стол. Недостатки, как вы говорите, состоят в том, что все столбцы для всех типов должны быть в одной таблице, что приведет к созданию широкой таблицы с большим количеством нулевых данных.

Сами категории довольно исправлены, поэтому добавление новых, вероятно, довольно редко. Другой способ сделать это - задать определенные свойства, связанные с одной большой таблицей, и шаблоны динамических свойств (у классифицированных свойств много свойств). Но это, вероятно, не было бы хорошо с точки зрения производительности.

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