@bioforge
Верстающий пыхер

Как лучше организовать базу данных?

Добрый день!
Есть структура базы e6b4ec6b71a348d7b58414a42c39db85.png
Урлы всех страниц хранятся в таблице url, колонка object_id это id города, категории, товара и т.д.
Как грамотно связать url.object_id с колонками city.city_id, product.adv_id, metro.metro_id, user.user_id, folder.folder_id ? Типов объектов в будущем скорее всего будет больше.

P.S. Если не сложно можете ли ещё покритиковать данную структуру ?

UPD. Изменил схему, добавил новые таблицы.
ad99beed153b446f9de550086f5c3b07.png

Сайт каталог товаров, с регистрацией для юр. и физ. лиц.
У пользователя при регистрации указывается город и метро, что так же можно отдельно указывать у товара.
У товара динамический список параметров, так же у каждого товара ведётся статистика просмотров. Можно указывать разную валюту и тип цены.
Для поиска будет подключён elasticsearch.

Что не нравиться в схеме:
Для всех страниц страниц, таблица url является родителем, хотелось бы что бы удаляя например товар удалялся урл, сейчас на оборот.
Таблица пользователей одна для юр и физ лиц, не получается грамотно разделить.
  • Вопрос задан
  • 2139 просмотров
Пригласить эксперта
Ответы на вопрос 1
@carbon88
.NET developer/ORM developer
Быстрым взглядом окинул вашу схему.
1) есть одно правило при построении ER-моделей, звучит оно как-то так "мертвые вороны летят на восток". смысл его в том что таблицы располагаются на диаграмме так что справочники и редко изменяемые таблицы скапливаются в правом нижнем углу, а, соответственно, наиболее изменяемые таблицы в левом верхнем. Если следовать этому правилу читаемость диаграммы базы данных улучшается в разы. Пример:468066d665e44b43a69db7971676bcbc.PNG

2)User. по правилам модель доводят до 3,5НФ (или Нормальная форма Бойса-Кодда).(Список нормальных форм). Так вот таблица User не нормализована должным образом.

Обычно контакты выносят в отдельную таблицу (по крайней мере я бы так сделал). По адресам тоже возможны дубли записей.
Если у вас указание одной из станций метро обязательно для пользователя, то ссылка на город не нужна если есть ссылка на метро. очевидно что каждое метро относиться к одному городу. Если метро не обязательно указывать то тогда ссылку на город оставляем.

3) Product. Обычно продукт это некоторая номенклатура, то есть описание свойств товара, его названия и прочего. Цена в него не входит. Что вы будете делать если придут продукты из разных партий и закупочная цена у них будет разная? Ваша модель этого не отражает. обычно есть некий прайс-лист в котором есть соответствие продукта и цены. прайс-листы в реальной жизни могут меняться и имеют дату на которую этот прайс-лист действителен. Тогда обозначенной мной ситуации не будет. Прайс лист оформляется как минимум двумя таблицами - собственно прайс-листом с общими параметрами как дата создания, составитель ect. и табличной частью, где записаны позиции всех прайс-листов (с ссылкой конечно же) с указанием продукта и его стоимости по конкретному прайс-листу. Валюту можно указать как в конкретных позициях прайс-листа так и глобально на прайс-лист.

"Для всех страниц страниц, таблица url является родителем, хотелось бы что бы удаляя например товар удалялся урл, сейчас на оборот."
Не совсем понял. у кого у всех? думаю у mysql есть настройки внешних ключей OnUpdate, OnDelete. можно через них организовать корректное удаление.

"Таблица пользователей одна для юр и физ лиц, не получается грамотно разделить."
Нормально можно разделить. позже сегодня напишу каким образом. рабочий день закончен и нужно уходить от компа.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы