My project must have many managers, of that just one may have super-admin rights.
What's the easiest method to represent this within the database?
You will find a couple of ways to get this done.
# 1: Possess a column in your administrator (or user) table known as
IsSuperAdmin and also have an place/update trigger to make sure that just one has it set at any time.
Number Two: Possess a
TimestampWhenMadeSuperAdmin column inside your table. Then, inside your query to determine who it's, use something similar to:
select user_id from users where TimestampWhenMadeSuperAdmin is not null order by TimestampWhenMadeSuperAdmin desc fetch first 1 row only;
# 3Or4: Place the SuperAdmin user ID right into a separate table, using either the trigger or last-person-made-has-the-energy approach from amounts one or two.
Personally, I love number two since it offers a superior the thing you need without unnecessary triggers, and there's an audit trail regarding who had the energy at any time (though not really a complete audit trail because it is only going to store the newest time that somebody is made a SuperAdmin).
The problem with # 1 is how to proceed should you just obvious the present SuperAdmin. Either you need to provide the energy to another person, or nobody has it. n short, you will get yourself right into a situation where there's no SuperAdmin. And # 3 and 4 just complicate things by having an extra table.I
Make use of a roles/groups approach. You've got a table that contains all of the possible roles, and you come with an intersect table that contains the important thing from the user and also the key from the role they fit in with (there might be multiple records per user as each user might have several roles (or fit in with several groups)).
Also, don't give them a call super admin - just admin is okay, call the relaxation energy user or something like that similar.
Simple, yet effective: UserId = 1. The application will invariably know it's the SuperUser.