В настоящее время я работаю над реструктуризацией базы данных моего сайта. Поскольку имеющаяся у меня схема не является одной из лучших, я подумал, что было бы полезно услышать некоторые предложения от вас.
Для начала мой сайт на самом деле состоит из виджетов. Для каждого виджета мне нужна таблица для settings
(где каждый экземпляр виджета имеет свои пользовательские настройки), таблица для common
(общие элементы между экземплярами одного и того же виджета) и userdata
(пользовательские сохраненные данные внутри экземпляра виджета).
До сих пор у меня была следующая схема, состоящая из 2 баз данных:
- первая база данных, где у меня были все таблицы обслуживания сайта (например, пользователи, установленные виджеты, журналы, уведомления, сообщения и т. Д.), А также таблица, в которой я присоединял каждый экземпляр виджета к каждому пользователю, который его создал, назначив уникальный ID (поэтому у меня есть следующие столбцы:
user_id
, widget_id
и unique_id
).
- вторая база данных, где я хранил все данные, связанные с виджетами. Это означает, что для каждого виджета (уникального по
widget_id
) у меня было три таблицы: [widget_id]_settings
, [widget_id]_common
и [widget_id]_userdata
. В каждой из этих таблиц каждая строка содержала unique_id
виджета пользователя. На самом деле здесь были все данные пользователей, хранящиеся в виджете.
Чтобы дать краткий пример того, как работают мои базы данных:
Первая база данных:
- В таблице
users
у меня есть user_id = 1
- В таблице
widgets
у меня есть widget_id = 1
- В таблице
users_widgets
у меня есть user_id = 1, widget_id = 1, unique_id = 1
Вторая база данных:
- В
1_settings
у меня есть unique_id = 1, ...
, где ... обозначает настройки виджета пользователя
- В
1_common
у меня есть несколько строк, которые представляют общие данные между экземплярами одного и того же виджета (поэтому здесь нет данных, специфичных для пользователя)
- В
1_userdata
у меня есть unique_id = 1, ...
, где ... представляет данные виджета пользователя. Важным примечанием здесь является то, что эта таблица может содержать несколько строк с одинаковым unique_id
(например, для виджета задач у пользователя может быть несколько задач для экземпляра виджета)
Надеюсь, вы поняли в общих чертах мою схему базы данных.
Теперь я хочу разработать «более чистую» схему, чтобы в моем приложении не было необходимости иметь 2 базы данных и каждый раз переключаться с одной на другую. Было бы также замечательно, если бы я нашел способ НЕ генерировать динамически таблицы во второй базе данных (1_settings, 2_settings, ..., n_settings).
Я буду очень признателен за любые попытки предложить лучший способ добиться этого. Заранее большое спасибо!
EDIT:
Должны ли я иметь в виду базы данных вроде MongoDB или CouchDB при реструктуризации моих баз данных? Я имею в виду, для второй базы данных, где было бы лучше, если бы у меня не было фиксированной схемы.
Кроме того, как традиционные SQL и NoSQL уживаются на одном сайте?