noSQL / MySQL - хранение информации о продукте - PullRequest
0 голосов
/ 01 ноября 2011

Я думал о лучшем способе хранения информации о продукте / клиенте / транзакции в базе данных.Мы говорим здесь о сотнях тысяч записей ...

У меня есть очень четкое представление о том, как данные будут представлены на бумаге, и в основном это выглядит как дерево ...

Автомобиль -> VW -> Гольф -> 1,6 литра 5 дверей

Проблема здесь в том, что каждый продукт в дереве нуждается в различных атрибутах.Например, если бы продукт представлял собой лодку, ему не нужен атрибут «размер колеса», но потребовался бы «размер пропеллера».В любом случае, вы поймете, в чем дело!

Я очень новичок в NoSQL, который работал только с MySQL в прошлом, но похоже, что это может быть лучшим решением здесь.Мне нравится идея отсутствия схемы.

У кого-нибудь есть опыт создания таких систем?Для чего ты пошел?Какой-то конкретный вариант?

Ответы [ 3 ]

2 голосов
/ 01 ноября 2011

Если вам требуется реляционная структура (например, древовидная структура), то вам следует использовать модель реляционной базы данных. NoSQL лучше всего использовать в ситуациях, когда вы просто хотите хранить данные, не обращая внимания на их структуру.

Если вы хотите иметь произвольный набор необязательной информации, вы можете придерживаться реляционной базы данных и использовать столбец BLOB для хранения необязательных данных, возможно, в виде строки JSON. Это, вероятно, будет работать лучше всего по нескольким причинам:

  1. Вы можете сохранить способность легко запрашивать набор продуктов, например, SELECT * FROM products WHERE catid = 123.
  2. Вы по-прежнему можете легко фильтровать результаты, используя общие свойства ваших продуктов.
  3. Вы также можете связать свои записи транзакций с продуктами.
  4. В тех случаях, когда вы хотите фильтровать по необязательному столбцу, вы можете выполнить LIKE, чтобы вернуть только строки, содержащие это конкретное имя столбца в BLOB-объекте JSON, а затем вручную отфильтровать результаты в своем коде.
1 голос
/ 02 ноября 2011

То, что вы ищете, может быть легко представлено в документе (ориентированный DB => например, CouchDB).Например, для представления вашего VW:

  • Автомобиль -> VW -> Golf -> 1,6 литра 5 дверей:
{
 "Cars": [
   {"Make":"VW", "Model":"Golf", "Engine":1.6, "Doors": 5, "Wheel Size": 19},
   {"Make":"Toyota", "Model":"Supra", "Engine":2.4, "Doors": 5, "Packages":["Tech", "Cold Weather"]}
 ]
}

ПосколькуСхема "бесплатно", вы можете добавить удалить атрибуты автомобиля.Вы можете узнать больше о CouchDB Document API здесь

0 голосов
/ 01 ноября 2011

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

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

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

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