Есть мелкие ошибки:
- Для разных товаров может быть одна фотка
- Поле "доступен" - в таблице товар можно вычислить (если количество товара на складе больше нуля)
- Для размеров я б выделил отдельную сущность. т.к. многие книги идут одного формата (напр. серия книжек), тип обложки тоже можно отдельно вынести (слепить эти 2 группы свойств в одну таблицу или в 2 разных - это уже ваше дело)
- Вы забыли, что у каждой книги есть издатель и год издания, по которому и стоит определять, новинка данная книга или нет. Если предположить, что книга считается новинкой 1 год, то новинками будут все книги, у которых год издания больше предыдущего года.
- Думаю, для некоторых книг будет сложно однозначно определить категорию, почему не может быть фентезийная книга в то же время драмой или еще чем-то там (по аналогии с фильмами). В таком случае нужна связь многие к многим.
- Скидка - это тоже интересная штука, - она не может действовать вечно. У нее должно быть время начала и время окончания действия. Посему нужна отдельная сущность.
В итоге у нас получится:
/* - описание продукта - */
product
---------------
id
name
description
format_id (format.id)
publisher_id (publisher.id)
publish_date /* int, фактически только год и нужен */
count /* склад один значит нет смысла выделять в отдельную таблицу */
/* - описание категории -
p.s. если надо добавить ограничение по возрасту, то легче всего это сделать добавив поле в эту таблицу
напр.: задав для категории "эротика" ограничение. чтоб камасутру не продавали детям школьного возраста */
category
id,
name,
description
/* - привязка книг к категориям -
позволяет одновременно задать разные категории для книг,
напр: приключения + роман или детектив, драма */
product_categories
product_id (product.id)
category_id (category.id)
/* - скидки - */
discount
id
startdate
enddate
discount
/* - привязка товаров к скидкам -
в принцыпе можно было в таблицу discount добавить поле product_id,
но в этом случае субд было бы неудобно пользоватся,
- для каждого товара вам придется вбивать скидку что думаю будет неудобно.
пример: вам надо сделать скидку на все книги которые вышли 10 лет назад
*/
product_discounts
product_id (product.id)
discount_id (discount.id)
format
id
dimension /* размеры /
format / тип обложки */
update:
Простите, забыл добавить рейтинг, думаю, его реализация зависит от того, что вы подразумеваете под рейтингом, если значение как покупатели оценивают книгу, тогда надо сделать так, как у вас, если это "продаваемость книги", другими словами колчество продаж за единицу времени, то лучше считать находу: количество продаж / (дата последней продажи - дата первой продажи)
Из рисунка я понял, что товар м.б. на разных складах, также как м.б. несколько фото этого товара и несколько рейтингов. Возможно вместо "рейтинг" надо понимать "отзыв".
А вот категория у каждого товара одна. Такая вот "картина мира".
@Metalex, для нее оставьте как есть.
– avp Apr 18 '12 at 15:29Тогда предлагаю таблицы Склад и Рейтинг убрать, атрибуты перенести в Товар.
Зачем лишние таблицы ?
– avp Apr 18 '12 at 21:36