Как можно сохранить несколько разных типов данных в одной таблице - PullRequest
0 голосов
/ 15 мая 2010

Это моя ситуация: я создаю рекламное приложение в Django и Mysql. Я использую подход гибкой рекламы, где мы имеем:

таблица с категориями объявлений (несколько категорий, таких как дом, мебель, автомобили и т. Д.)

  • id_category
  • имя

таблица с деталями для категорий объявлений (дом: площадь, кв. М. Авто: сиденья, цвет.)

  • id_detail
  • id_category (категория, которую описывает деталь)
  • имя
  • тип (логическое, char, int, long и т. Д.)

рекламный стол (я продаю дом. Я продаю машину.)

  • id_ad
  • id_category
  • текст
  • дата

стол, где я планирую объединить детали объявлений (дома: A-area, 500 кв.

  • id_detail_ad
  • id_ad
  • id_detail
  • значение

Возможно ли это? Могу ли я иметь таблицу данных для всех объявлений, даже если они содержат цифры, тексты, логические значения и т. Д.? Или я должен был бы сохранить их все как текст и затем интерпретировать их через код соответственно? Пожалуйста, выскажите свое мнение. Спасибо.

Ответы [ 4 ]

3 голосов
/ 15 мая 2010

Реляционные базы данных не поддерживают пользовательские типы данных, как это делают OODB. Я рекомендую разделить столбец сведений на несколько других столбцов, так как это повысит производительность и удобство использования и масштабируемость в будущем.

0 голосов
/ 15 мая 2010

Эти таблицы очень похожи на пары ключ-значение ... в проектировании реляционных баз данных это большое нет-нет, вы хотите делать то, что рекомендует Бен.

И все же я видел, что многие веб-CMMS используют такого рода схемы в своих структурах таблиц. Почти как если бы они ожидали, что таблицы будут структурированы таким образом. Если Django хочет, чтобы вы решили проблему таким способом, вам, возможно, придется сделать это таким образом. В этом случае другие комментарии по извлечению данных в / из столбцов или использованию BLOB-столбца работают хорошо.

Однако, если Django ожидает таблицы таким образом, то, откровенно говоря, разработчики Django не знали, как правильно и эффективно использовать реляционную базу данных, и их среда должна использовать другой механизм базы данных, работающий с ключом-значением. пар. Это плохой дизайн, если они принуждают пользователя / программиста к подобным ситуациям.

0 голосов
/ 15 мая 2010

Это что-то вроде хака, но вы можете хранить любые виды информации, которые вам не нужны для индексации, в столбце text в mysql. Вы можете использовать либо pickle, если вам не важна читаемая информация, либо (лучше) jsonpickle, который удобен для чтения человеком и легко доступен через jsonpickle.encode и jsonpickle.decode. Мы делаем это на моей работе, и это работает плавно.

0 голосов
/ 15 мая 2010

Рассмотрите возможность использования одной таблицы для каждого типа объявлений. Это старый способ СУБД для моделирования данных, которые вы описываете. Это означает, что вам придется добавлять таблицу в базу данных каждый раз, когда вы добавляете тип объявления. Я думаю, вы обнаружите, что это не так плохо, как кажется. Преимущества этого подхода будут заключаться в меньшем количестве кода, написанного для управления данными, и / или в более эффективном использовании вашей библиотеки объектных / реляционных отображений (отказ от ответственности: я никогда не использовал Django, поэтому ваш пробег может отличаться, но это определенно применимо к другим инструментам )

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