Помогите с настройкой базы данных - PullRequest
1 голос
/ 15 сентября 2009

На моем сайте будет доступно много продуктов, но они будут разделены на совершенно разные сайты (домены).

У меня вопрос: лучше ли мне объединять все продукты в одну базу данных и использовать ID для различения сайтов, или мне нужно настроить таблицу и / или БД для сайта?

Вот мои мысли

ОТДЕЛЬНЫЕ БАЗЫ ДАННЫХ

  • Легче читать из бэкэнда
  • По категориям лучше
  • делает резервное копирование более сложным
  • Если мне нужно внести изменения в схему, ее нужно будет отправить во все базы данных

ЖЕ БАЗЫ ДАННЫХ

  • Все в одном месте
  • Может быть громоздким
  • Одна база данных будет иметь большой размер файла, и поиск может пострадать

Может кто-нибудь предложить мне совет, какой путь лучше и почему?

Ответы [ 4 ]

1 голос
/ 17 сентября 2009

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

На моем сайте будет доступно много продуктов, но они будут распределены по категориям на совершенно разные сайты (домены).

Я предполагаю, что у вас будет один интернет-магазин с несколькими различными магазинами: cool-widgets.com, awesome-sprockets.com, neato-things.com и т. Д. Все они будут одинаковыми, за исключением, возможно, CSS-скин или что-то простое в этом роде. Все вещи администратора магазина будут выполнены в какой-то центральной системе, а доменное имя будет просто действовать как имя категории.

Таким образом, разделение одних и тех же данных на два разных контейнера по произвольному критерию (category_name == 'cool-widges.com') - это разбиение данных , что является анти-паттерном. Точно так же, как у вас не будет двух разных пользовательских таблиц, основанных на имени пользователя ([Users $ A-to-M] и [Users $ N-to-Z]), не имеет смысла иметь две разные таблицы (или базы данных). ) для названий категорий.

Существует и будет много общего кода между категориями: управление пользователями, администратор, обработка заказов, импорт данных и т. Д. Объединить несколько хранилищ данных в общий код будет гораздо сложнее, чем будет. для разделения категорий в магазине отображать код. Кроме того, ошибки сегрегации будут гораздо более очевидными: на странице сравнения цен показаны товары из всех трех магазинов. Ошибки агрегации будут намного меньше: только три из четырех магазинов были обновлены. Вот почему это анти-паттерн.

Примечание: да, перед тем, как вы скажете, что портирование данных имеет свои применения (что оно и делает), эти применения появляются в намного позже, чем возникают проблемы с производительностью. Многие серьезные платформы баз данных допускают закулисное разделение, чтобы не создавать глупую модель данных.

1 голос
/ 15 сентября 2009

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

Если данные не должны быть общими для всех сайтов, будет полезно разделить одну базу данных на сайт. Говоря о сложности обновления структур таблиц, вы можете просто записать изменения базы данных (сохраняя выполненные вами запросы ALTER, UPDATE, DELETE в файле SQL) и обновить другие базы данных тем же файлом SQL.

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

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

0 голосов
/ 15 сентября 2009

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

SELECT value FROM CommonDB.currencies WHERE type='euro';
SELECT price FROM OldTownDB.Products WHERE id=newtownprodid;
0 голосов
/ 15 сентября 2009

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

Однако, несколько вопросов, которые вы можете задать себе:

  • Это действительно будет два магазина, а может и больше? Если больше, то одна база данных может быть умнее.
  • Продукты действительно одинаковы? Если вам нужно втиснуть продукты в одну общую базу данных, потому что они относятся к разным видам (например, автомобили и продукты питания; количество и характер деталей, которые вы хотите хранить, совершенно разные), то не делайте этого; вместо этого используйте две базы данных / таблицы.

Главный вопрос: что может стать более сложным в будущем: магазины или продукты?

...