2013-08-30 3 views
0

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

Я порядочный программист, но я, по общему признанию, не специалист по базам данных; тем более, когда дело доходит до проектирования базы данных. В настоящее время информация о пользователе/​​компании хранится через схему реляционной базы данных в MySQL, которая работает отлично.

Моя проблема заключается в том, что, хотя моя реляционная схема работает блестяще для информации о пользователях/компаниях, это путает меня о том, как внедрять информацию инвентаризации. Проблема в том, что каждый «список инвентаря» определенно содержит разные атрибуты, относящиеся к типу продукта, но идентичные атрибутам каждого другого продукта в списке. Моя первая мысль заключалась в создании таблицы для каждого «списка инвентаря». Тем не менее, я чувствую, что это было бы очень грязно и осложнило будущие попытки KDD. Я также (кратко) рассматривается с использованием «мастер инвентаризации» и хранения информации (например, переменные категории и данные в виде строки JSON. Но я полагал, что JSON строки MySQL просто стала больше боль в заднице.

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

+0

PArt как вы решаете это включает в себя вопрос о том, как вы собираетесь использовать эти поля, которые не являются стандартными? Если вы их только покажете, то все описание в поле varchar или nvarchar (max) будет работать с общими функциями, которые вы запрашивали бы в качестве таблицы inteh как отдельные поля. Если вам нужно запрашивать различные типы атрибутов vastlky, существуют другие альтернативы, включающие EAV или базу данных документов. – HLGEM

+0

Да, мне нужно будет сделать некоторые манипуляции на PHP, а затем: – CRK

+0

Да, мне нужно будет сделать некоторые манипуляции на PHP, а затем передать их в приложение Backbone в браузере пользователя. Поскольку данные должны обрабатываться в каждой транзакции, я думаю, что слишком интенсивно работать с процессором JSON (или любым другим VARCHAR), обрабатывать его и т. Д. Кроме того, я чувствую, что хранение всего в VARCHAR в конечном итоге станет кошмаром так как данные инвентаризации могут быстро складываться. Извините, мой комментарий выше был отрезан. – CRK

ответ

1

Я бы прочитал этот пост: Entity Attribute Value Database vs. strict Relational Model Ecommerce

То, как я всегда это делал, состоит в том, чтобы создать базовую таблицу для инвентаря, в которой хранятся общепринятые поля. Идентификатор продукта, название продукта и т. Д.

Затем у вас есть другая таблица с динамическими атрибутами. Очень популярным примером является Wordpress. Если вы посмотрите на свою модель данных, они сильно используют эту идею.

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

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

+0

Отличный ответ. Я сделаю некоторое чтение, чтобы решить, какое решение соответствует моим потребностям. Быстрый вопрос: я чувствую, что база данных EAV подходит как Wordpress, потому что общее количество атрибутов/данных будет оставаться относительно низким.Будет ли этот вариант по-прежнему считаться жизнеспособным в системе, которая может иметь потенциально сотни тысяч продуктов, каждая из которых имеет от 5 до 10 атрибутов? – CRK

+0

На самом деле Wordpress использует его сильно. Они имеют порядок сотен атрибутов, а не только горстку. Это немного удивительно и, вероятно, по крайней мере одна из причин, по которой сайты Wordpress могут работать очень медленно. Одна из их _huge_ ошибок (на мой взгляд) делает поле значения атрибута строкой. Если вы храните целое число, оно сохраняется в виде строки и затем преобразуется в целое число. Валовой. – ryan1234