J'essaie de construire le système de gestion des écoles et je n'ai du mal à concevoir une structure de base de données optimale. J'ai des tables d'élèves, de personnel et d'utilisateurs pour la connexion. La table des utilisateurs disposera uniquement d'informations de connexion (Usernumber, mot de passe) et les étudiants et le personnel contiendront des informations personnelles. J'ai séparé des étudiants et du personnel car ils contiennent des données personnelles différentes. Mais ils ont tous les deux un usernumber. Disons que je me connecte à un UserNumber 98242, comment peut laisser le système savoir où dois-je regarder, dans la table des étudiants ou la table du personnel? p> Je voudrais des recommandations sur les structures de base de données. p> p>
4 Réponses :
Vous pouvez faire quelques choses. Vous pouvez créer un type dans la table des utilisateurs et regarder cela. Vous pouvez également rejoindre les deux tables, puis pour recevoir une vérification d'enregistrement si l'ID d'étudiant ou l'ID du personnel a été renvoyé.
Votre requête pourrait être quelque chose comme p>
SELECT users.id as user_id, students.id, staff.id FROM users LEFT JOIN students ON users.id = students.id LEFT JOIN staff ON users.id = staff.id WHERE id = 98242
select *, tableoid::regclass -- Prints the origin table name (users, students, stuff, ...) from users where number = 98242;
Bien qu'il n'y ait que peu de colonnes séparées pour les étudiants et les membres du personnel, je le garderais simple: de cette façon, une personne peut avoir des comptes d'utilisateurs 0-N - qui est la typique réalité. Vous pouvez limiter à un seul compte par personne en ajoutant code> Contrainte code> Contrainte unique (personne_id) code> à table Utilisateurs code>. P> one_role_max code> applique que les colonnes d'étudiants ou les colonnes du personnel doivent rester nulle.
Contraint code> one_role_min code> applique qu'au moins une des deux doit avoir des valeurs.
Adaptez ce qui doit être / peut être rempli à vos besoins. Les expressions fonctionnent parfaitement pour la conception actuelle. Voir: P>
Et un étudiant ne peut jamais être membre du personnel? :) Et il n'y a pas d'autres rôles? Comme "Guest", "conseiller", ... et une personne ne peut avoir qu'un seul compte d'utilisateur? (Ou aucun compte du tout?)