Помогите мне разработать схему базы данных для iou веб-приложения - PullRequest
2 голосов
/ 01 марта 2011

Я подумываю о создании веб-приложения iou (я в долгу перед тобой), в котором я могу отследить, кто и что мне должен. Я делаю это как побочный проект. В любом случае, у меня нет опыта проектирования схем баз данных. Дизайн приложения показан на рисунке ниже: enter image description here

Сейчас я знаю, что мне нужно иметь пользовательскую таблицу, по крайней мере, со следующим:

UserTable:
username, usernameId (pk), password, passwordHint, email

Тогда я запутался в том, что делать дальше. Должен ли я создать новую таблицу для каждого человека № 1, № 2 и т. Д.? Или я должен иметь другую таблицу IouTable со всеми «транзакциями» и использовать имя пользователя в качестве fk?

IouTable:
usernameId, personName, amount, description, date

Итак, когда пользователь Yko входит в систему, он запускает этот запрос: SELECT * FROM IouTable WHERE usernameId = username (возможно, здесь это неправильно)

Тогда я бы взял строки и выделил каждого человека отдельно и разместил каждую транзакцию для каждого человека на отдельной странице.

Заранее спасибо за любую помощь / совет / предложение !!!

Ответы [ 4 ]

3 голосов
/ 01 марта 2011

Определенно одна таблица для всех долговых расписок.

Сценарий 1: Как Yko, я хочу получить список всех людей, которым я должен и сколько всего

SELECT personName, sum(amount) totalOwed FROM IouTable WHERE usernameId = <Yko>

Сценарий 2: Как Yko, я хочу знать, сколько я должен Бобуи почему.

SELECT amount, description, date FROM IouTable WHERE usernameId = <Yko> and personName = 'Bob'

Давайте посмотрим немного ближе к вашему делу.

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

  2. В таблице IouTable перечислены все долговые расписки.Есть несколько проблем с этой таблицей.

    • Переносит, что Yko одолжил у Боба ровно 2 евро два раза в день и не потрудился заполнить описание.В этом случае у вас нет правильного способа различить две транзакции.Вам, вероятно, следует добавить идентификатор транзакции, чтобы однозначно идентифицировать транзакции

    • Кроме того, у Yko могут быть два друга по имени Боб.Как Yko может отделить эти два друг от друга.Должен ли быть список друзей, которых Йоко может взять в долг?

    • В конце концов, Yko должен заплатить.Yko, вероятно, может вычистить долг из таблицы, но тогда как мы можем узнать позже, кто кому одолжил, сколько?Должен ли быть столбец, в котором указано, был ли отдел оплачен?

    • Некоторые друзья Yko могут даже подумать о том, чтобы вернуть деньги в приращениях.Yko мог бы отредактировать первоначальную сумму задолженности, но опять же, мы бы не знали, что многое нужно было в первую очередь.Должна ли быть колонка, в которой указано, сколько отделов уже выплачено?Если Yko хочет более внимательно следить за долгом, неплохо было бы составить список всех выплат.Затем вы можете посчитать общую сумму задолженности, суммируя, сколько было погашено.

1 голос
/ 01 марта 2011
TABLE User:
username, password, passwordHint, email
PK = username

TABLE Iou:
username, pesronName, date+time, amount, description, repaid(true if personName has repaid it yet)
PK = username,personName,date+time (or, make an auto-incrementing id num)
0 голосов
/ 17 марта 2011

Моя компания начала собственный маленький побочный проект с теми же намерениями пару лет назад, и мы наконец выпустили его на прошлой неделе.Он вырос гораздо больше, чем планировалось, и теперь может отслеживать любые долговые расписки и интегрируется с Facebook и Twitter.Если вы хотите проверить это, перейдите на IOUmate.com

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

Спасибо, Дэн


PS Я бы порекомендовал вам добавить таблицу друзей, чтобы нормализовать ваш IouTable.Каждый IOU может быть связан с пользователем и другом.Если вы хотите идти в том же направлении, что и мы, друзья могут либо стать участниками, либо нет.Удачи!

0 голосов
/ 01 марта 2011

Если вы имеете в виду, что он отслеживает IOU между двумя пользователями, то таблица IOU будет иметь внешний ключ обратно в таблицу Users, один для «ower» и другой для «owed».

...