Я создаю систему управления волонтерами, и у меня возникают некоторые проблемы с проектированием БД:
Чтобы объяснить процесс:
Добровольцы могут подписаться на учетные записи. Волонтеры сообщают о своих часах проекту (каждый волонтер может иметь несколько проектов). Волонтеры-супервайзеры получают уведомление, когда количество часов волонтеров приближается к определенной сумме, чтобы дать им вознаграждение.
Например:
волонтер, который добровольно вызвался 10 часов, получает бесплатную футболку.
Проблема, с которой я сталкиваюсь, заключается в том, как спроектировать БД таким образом, чтобы один профиль вознаграждения мог быть связан с несколькими проектами, а также иметь один профиль вознаграждения как «многоуровневый». Главное в этом то, что структуры вознаграждений могут измениться, поэтому их нельзя просто закодировать.
Пример того, что я имею в виду под «многоуровневым» профилем вознаграждения:
Доброволец, который добровольно вызвался 10 часов, получает бесплатную футболку.
Доброволец, который добровольно вызвался 40 часов, получает бесплатный чек на благодарность в размере 50 долларов США.
Решения, которые я сам придумал:
Иметь таблицу профиля вознаграждения, которая связывает одну строку с каждым профилем вознаграждения.
rewardprofile:
rID(primary key) - int
description - varchar / char(100)
details - varchar / file (XML)
Кроме того, могут ли записи в полях БД быть файлами?
OR
Чтобы иметь таблицу наград, которая связывает одну предустановленную сумму и вознаграждение, где каждая строка выглядит следующим образом, и вторую таблицу профилей наград, которая связывает их записи наград:
rewards:
rID(primary key) - int
rpID (references rewardsProfile) - int
numberOfHrs - int
rewardDesc - varchar / char(100)
rewardsprofile:
rpID(primary key) - int
description
так что это может выглядеть примерно так:
rewardsprofile:
rpid | desc
rp01 | no reward
rp02 | t-shirt only
rp03 | t-shirt and check
rewards
rid | rpID | hours | desc
r01 | rp02 | 10 | t-shirt
r02 | rp03 | 10 | t-shirt
r03 | rp03 | 40 | check
Я уверен, что в этой проблеме нет ничего нового, но мой гугл-фу слаб, и я не знаю, как выразить это осмысленно. Я думаю, что там должно быть решение более формализовано, чем мой (взломать и косая черта) метод. Если кто-нибудь может направить меня к тому, как называется эта проблема, или к каким-либо решениям, это будет здорово. Спасибо за ваше время!
Ура,
Иеремия Тантонгко