A software development company wants to create a social network application where users can post brief audio messages giving their thoughts.
Each user of the application will have a password, a name (consisting of first name and last name), an e-mail address, a registration date, years registered, and a location (consisting of a city, state or province, and country). The e-mail address uniquely identifies a user. The years registered should be computed from the registration date.
Each user may fall into one of three categories, normal, moderator, or guest. A user may not fall into more than one of these categories at the same time. In addition to the above user attributes, a normal user will have a membership handle. The membership handle will be unique, but the user will still be identified by his or her e-mail address. A moderator will have a membership handle as well as a work schedule.
Users may follow other users. Each time one user follows another, one's role is as the follower, and the other's role is as the thinker. A thinker may have many followers, and a follower may follow many thinkers. For each follower/thinker relationship, the system should store a Boolean value indicating whether or not the thinker has blocked the follower.
Normal users may post thoughts. A normal user may post many thoughts, but each thought must belong to a single normal user. Each thought has an audio file name, a number, a title, and a popularity score. In addition, a user may specify one or more topics with each thought. A thought's popularity score is computed based on the average rating it receives from users (described below). Each thought can only be identified by its number and the ID of the normal user that posted the thought.
Users may rate other users' thoughts. A user may rate many thoughts, and each thought may be rated by many users. Each time a user rates a thought, the system should track the score given to it by the user. The score will have a range between 1 and 10. A user should not be allowed to rate the same thought twice.
Moderators may censor thoughts if they determine them to be inappropriate. A moderator can censor many thoughts, but each thought can be censored by only one moderator. Each time a moderator censors a thought, the system should store the date the thought was censored.
In certain cases, thoughts may be given special awards. A thought may receive several awards, and each award may be given to several thoughts. Each award has a unique id number, a title, a description, and an amount. Awards are managed by moderators. Each award must be managed by one moderator, and a moderator may manage at most one award.