2015-01-06 3 views
0

Я планирую создать свою первую базу данных, так что это будет вопрос новичков. Моя база данных должна быть для сети кредитования заимствований, где пользователи могут брать продукты у других пользователей. Создание одной учетной записи пользователя должно быть достаточным для возможности заимствовать и одолжить и в одно и то же время. Единственным исключением должно быть то, что пользователь не может брать продукты, которые были предложены им самим.ER-модель для кредитования-кредитования-сети?

Так что мой вопрос, какой из этих двух вариантов лучше один:

Имея один объект для пользователя, который может занимать и ссужать. Имя объекта «USER». Имея два разных сущности как для заемщиков, так и для дарителей, чтобы помешать пользователю заимствовать собственные продукты?

ответ

1

Если я правильно понимаю ваш вопрос, я бы рекомендовал 3-й подход:

  • USER модель = это пользователи, которые могут либо одолжить или придающие
  • ITEM модель = это идентифицирует элементы, которые могут быть заемные и их владельцы
    • owner_id = ссылается на идентификатор объекта USER.
  • HISTORY модель = это отслеживает историю кредитования и может включать в себя такие вещи, как:
    • item_id = ссылки идентификатор ITEM
    • borrower_id = референции идентификатор USER который заимствовал деталь
    • borrowed_at = отметка времени, когда объект был заимствован
    • returned_at = отметка времени, когда время было возвращено владельцу.

С помощью этой модели было бы прямо вперед, чтобы обеспечить, что borrower_id и item.owner_id не то же самое и для того, чтобы тот же элемент не может быть пущен к двум разным заемщикам в в то же время.

С точки зрения SQL, вы можете найти все элементы, которые не владеют делать что-то подобное (где my_id мой user.id):

SELECT * from items where owner_id != MY_ID; 

Если вы хотите, чтобы найти все элементы, которые которые не принадлежат мне, и не в настоящее время заимствовано, возможно:

SELECT * from items where owner_id != MY_ID and id not in (select item_id from history where borrowed_at is not null and returned_at is null); 

синтаксис будет отличаться для других языков, конечно.

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

+0

Здравствуйте! Спасибо за ваш ответ! Что я не понимаю, так это: Как это гарантировать, что заемщик_ид и item.owner_id не совпадают? – lioli

+0

@lioli - Я обновил свой ответ, чтобы ответить на ваш вопрос. –

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