2017-01-25 27 views
2

Я начал изучать cakephp 3, и это будет мой учебный проект. Идея приложения заключается в том, что каждый пользователь может иметь много продуктов, и пользователи могут торговать продуктами между ними. Рабочий процесс:Советы, необходимые для модели базы данных - Partial EER прилагается

  • Таким образом, один пользователь может посетить профиль другого пользователя, и он может нажать кнопку торговли. Это покажет все продукты обоих пользователей, но отдельно для каждого пользователя.
  • Пользователь может теперь выбрать один или несколько своих товаров, и он также должен выбрать один или несколько продуктов для начала своей работы.
  • Другой пользователь получит уведомление, что у него есть торговое предложение, и ему придется ответить. Теперь он может выбрать принять, отклонить или изменить торговли
  • Восприняв торговля получает «заблокирован»
  • Если отвергнуто торговля получает «заблокирован»
  • Если пользователь нажимает на торговлю изменения, затем он должен повторно его и другие продукты пользователей и отправить. Здесь мы возвращаемся к точке 3

Это мой дизайн DB до сих пор, но я думаю, что это не самое лучшее решение, поэтому я положил мои надежды на вас, ребята, чтобы предложить мне лучшее решение, если у вас есть один Db design

Если я суммирую все. Когда происходит торговля, мне нужно знать, кто торгует каким-либо (несколькими продуктами), с кем и в каком направлении он принимает, отклоняет или повторно выбирает торговые продукты. Я также ищу, возможно, для более значимых имен моих столбцов. Так как в какой-то момент роли пользователей меняются, и тот, кто запрашивал продукты, теперь находится на рассмотрении, и наоборот.

Если вам нужна дополнительная информация, пожалуйста, сообщите мне, и я предоставлю. Заранее спасибо

+0

В стороне: [_Advice on many: many schema_] (http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table) –

+0

Что будет с пользовательскими продуктами после торговли? Я имею в виду, что если пользователь 1 имел продукты A, B, C и user 2, имел продукты D, E. И торговля была между продуктами A, B и D, E. Таким образом, после успешной торговли пользователь 1 имеет продукты D, E, C и пользователь 2 - A, B? –

+0

И что означает «запертый»? Возможно, торговые продукты блокируются для новых новых сделок до тех пор, пока сделка не будет принята или отвергнута. –

ответ

3

Я полагаю, что у вас есть также products стол с колонками Id, user_id и так далее.

Согласно последним комментариям, кажется, текущая схема не поддерживает торговлю 1 продукт до 10. Для поддержки этого я хотел бы рекомендовать, чтобы заменить таблицу products_users_trades в products_trades с колоннами: Id, product_id, trade_id, created_date.

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

1 пользователя, чтобы показать торговлю (ы) с его продуктами:

select t.id, p.name, t.user_id, t.user_id1 from trades as t 
inner join product_trades as pt 
    on t.user_id = pt.trade_id or t.user_id1 = pt.trade_id 
inner join products as p on p.id = pt.product_id 
where t.user_id = 1 or t.user_id1 = 1 

Здесь вы можете использовать колонки t.user_id, t.user_id1, чтобы определить, какие товары принадлежат вам или нет и предлагаются вами или для вас.

2.To показать, какие продукты доступны для торговли:

select * from products as p 
where p.user_id = 1 and p.id not in 
    (select pt.product_id from trades as t 
    inner join product_trades as pt on t.id = pt.trade_id 
    where t.status_id = 1 and (t.user_id = 1 or t.user_id1 = 1)) 

Здесь status_id = 1 означает, что новый, запертую торговлю. Чтобы освободить блокировку, вам необходимо изменить статус на принятый или отклоненный.

3.Для создания торговли:

-- create a trade 
insert into trades (status_id, user_id, user_id1) values (1, 1, 2); 
-- insert all products in trade 
insert into product_trades (product_id, trade_id) values (1, 1); 
insert into product_trades (product_id, trade_id) values (1, 2); 

4.To проверить, если пользователь может принять или отклонить сделку - проверить, если эта сделка имеет user_id1 = его идентификатор пользователя

5.To принять или отклонить торговли - торговый статус изменения ,

6.Чтобы изменить сделку - сменить сделку, измените данные и удалите все product_trades и создайте новые. Если вам нужно показать измененные продукты в торговле, вам нужно удалить только измененные продукты, а столбец created_date будет идентификатором того, что это новый продукт.

+0

супер! Спасибо, человек за ваши усилия! –