Як краще організувати базу даних
NET developer / ORM developer
Швидким поглядом окинув вашу схему.
1) є одне правило при побудові ER-моделей, звучить воно якось так "мертві ворони летять на схід". сенс його в тому що таблиці розташовуються на діаграмі так що довідники і рідко змінювані таблиці скупчуються в правому нижньому кутку, а, відповідно, найбільш змінювані таблиці в лівому верхньому. Якщо дотримуватися цього правила Новомосковскемость діаграми бази даних поліпшується в рази. приклад:
2) User. за правилами модель доводять до 3,5НФ (або Нормальна форма Бойса-Кодда). (Список нормальних форм). Так ось таблиця User НЕ нормалізована належним чином.
3) Product. Зазвичай продукт це деяка номенклатура, тобто опис властивостей товару, його назви та іншого. Ціна в нього не входить. Що ви будете робити якщо прийдуть продукти з різних партій і закупівельна ціна у них буде різна? Ваша модель цього не відображає. зазвичай є якийсь прайс-лист в якому є відповідність продукту і ціни. прайс-листи в реальному житті можуть змінюватися і мають дату на яку цей прайс-лист дійсний. Тоді позначеної мною ситуації не буде. Прайс лист оформляється як мінімум двома таблицями - власне прайс-листом з загальними параметрами як дата створення, укладач ect. і табличній частиною, де записані позиції всіх прайс-листів (з посиланням звичайно ж) із зазначенням продукту та його вартості по конкретному прайс-листу. Валюту можна вказати як в конкретних позиціях прайс-листа так і глобально на прайс-лист.
"Для всіх сторінок сторінок, таблиця url є батьком, хотілося б що б видаляючи наприклад товар віддалявся урл, зараз на оборот."
Не зовсім зрозумів. у кого у всіх? думаю у mysql є налаштування зовнішніх ключів OnUpdate, OnDelete. можна через них організувати коректне видалення.
"Таблиця користувачів одна для юр і фіз осіб, не виходить грамотно розділити."
Нормально можна розділити. пізніше сьогодні напишу яким чином. робочий день закінчений і потрібно йти від компа.
Щодо таблиці url. на даний момент ця таблиця є батьківської для таблиць city, product, metro, user, folder (тобто. для тих у кого будуть окремі сторінки на сайті). Виходить так що якщо я хочу видалити товар, мені потрібно видалити запис з таблиці url, і при спрацьовуванні on delete cascade піти товар. За мойму має бути навпаки, тобто видаляємо товар і разом з ним віддаляється url
bio якщо чесно то мені не до кінця зрозуміло чому урли в базі зберігаються? це урли на зовнішні ресурси?