2013-02-16 5 views
1

Для практики я пишу торговый сайт, на котором у нас есть таблицы User и Item. Пользователь явно has_many элементов (если они добавлены в корзину), но товар belongs_to a User, хотя у многих пользователей будет тот же товар в корзине?Простой дизайн базы данных Ruby on Rails

Кроме того, что, если я хочу, чтобы список предметов, добавленных пользователем в свою корзину, а также список предметов, которые они просмотрели (для внесения предложений на основе поиска), было бы лучше иметь некоторые «сквозные», таблицы: Basket и Viewed?

+0

Вы можете создать полиморфную ассоциацию для временных элементов, если ваш просмотр является «недавно просмотренным». Создайте отдельную модель для этих временных параметров, и ей нужно будет указать user_id и item_id. – kobaltz

ответ

2

Когда у вас есть это много-к-многим, вы можете использовать HABTM схему:

Class User... 
has_and_belongs_to_many :items 

Однако, большую часть времени интернет-магазинов использовать OrderLines, чтобы не отставать от элементов, которые пользователи покупки. Это означает, что 'user' 'has_many' 'orderlines', 'item' 'has_many' 'orderlines', 'orderline' 'принадлежит_to' пользователю 'и' item '.

И, может быть, ваши порядковые номера будут только копиями предметов и не будут иметь прямой ссылки, потому что вы не захотите изменить порядок позиции после их обработки. Это действительно зависит от фокуса вашего магазина, который соответствует вашим потребностям.

Попробуйте найти несколько примеров в Интернете и подумайте о том, как вы хотите обрабатывать предметы, заказы и корзины.

+1

Взгляните на книгу [Agile Web Development with Rails] (http://pragprog.com/book/rails4/agile-web-development-with-rails). Книга помогает вам построить сайт для покупок и объясняет строки заказов, упомянутые в ответе выше. – 8bithero

0

Я привык отделять вещи, которые не совпадают, даже если отношения взаимно однозначны. Поэтому прежде всего я бы рекомендовал пользователей из корзин (1: 1-отношения).

После этого корзина содержит много предметов и предметов, которые могут быть в нескольких корзинах (m: n-relationship). Удостоверьтесь, что, возможно, пользователь любит покупать один и тот же элемент несколько раз.

виды могут быть реализованы как таблица ссылок между пользователями и элементами: у пользователей много видов и элементов, у которых много видов, но один вид всегда связан с одним пользователем и одним элементом.

+0

Спасибо за отзыв о нескольких товарах – user1802713

Смежные вопросы