Je crée une table BOOK_Issue qui contiendra l'ID de la personne à laquelle le livre est émis. J'ai un nom de colonne user_id qui contiendra les ids de tbl_student ainsi que tbl_faculty. donc comment définir le champ user_id de la table book_issue avec référence à deux colonnes de clé primaire.Comment référencer une colonne de clé étrangère avec plusieurs colonnes de clé primaire
Répondre
Créer une superclasse «personne» qui peut être de type «étudiant» ou de type «faculté». Référence ce à partir de la table BOOK_Issue
à la place. Fondamentalement, pour créer cette relation, vous aurez besoin d'un ID unique qui couvre à la fois «étudiant» et «faculté». Mettez ceci dans un tableau (tbl_person
?) Et faites en sorte que chaque ligne de tbl_student
et tbl_faculty
fasse référence à cette nouvelle table. Il est probablement préférable de retirer ensuite les champs présents à la fois dans tbl_student
et tbl_faculty
et de les placer dans ce nouveau supertable à la place.
Vous pouvez résoudre le problème en disposant d'une colonne supplémentaire dans la table BOOK_Issue, à côté de user_id, qui indique s'il s'agit d'un ID d'étudiant ou d'un ID de faculté. Alternativement, les identifiants eux-mêmes peuvent facilement inclure certains motifs qui indiquent leur nature (par exemple, tous les ids de faculté peuvent commencer par dire «UC», et aucun des id d'étudiant ne le sont).
Les deux solutions ci-dessus permettent d'utiliser ensuite des requêtes similaires à
SELECT B.*,
CASE B.BorrowerType -- could be LEFT(user_id, 2) etc...
WHEN 'S' THEN S.Name
WHEN 'F' Then F.Name
END As Name,
CASE B.BorrowerType
WHEN 'S' THEN S.PhoneNumber
WHEN 'F' Then F.Phone -- Note that these constructs allow
-- mapping distinct columns names etc.
END As PhoneNr
FROM BOOK_Issue B
LEFT JOIN tbl_student S ON B.BorrowerType = 'S' AND B.user_id = S.id
LEFT JOIN tbl_faculty F ON B.BorrowerType = 'F' AND B.user_id = F.id
WHERE B.DueDate < '11/23/2009' -- or some other condition
suivant Cela peut devenir un peu lourd quand nous avons besoin d'obtenir plusieurs colonnes des tables étudiants/professeurs. Une alternative possible est une UNION, mais cela entraînerait alors la répétition de la clause de recherche. Enfin, la meilleure solution mais non disponible sur tous les SGBD est une sous-requête pilotée par une condition "IF B.BorrowerType = 'S'".
Votre schéma de base de données n'est pas correct.
Si vous attendez des ID uniques, ils doivent figurer dans une table.
Vous pouvez créer une table avec tous les utilisateurs, et avoir une colonne pour définir leur type (étudiant, faculté). Ensuite, créez 2 tables différentes pour chaque type qui a les informations appropriées pour chaque utilisateur en fonction de leur type.
Cela devrait être votre conception de la table:
FacultyTable (FacultyID, FacultyName) StudentsTable (StudentID, StudentName, FacultlyID, ...) BookTable (BookID, BookName, ...) UsersTable (UserID, UserName, UserPassword, StudentID, lastlogin, ...)
maintenant, c'est la chose principale:
BookIssedTable (BookIssedID, BookID, UserID) // ce tableau me dit qu'un livre de « BookID a été publié à un utilisateur de "UserID" // cela peut être mieux car c'est certainement une grande amélioration par rapport à la conception initiale.
- 1. Clé étrangère à plusieurs colonnes dans MySQL?
- 2. DataSet et clé primaire avec plusieurs colonnes
- 3. Clé primaire et étrangère
- 4. SubSonic Clé primaire de colonne multiple
- 5. Clé primaire sur une colonne
- 6. Comment représenter "ALL" dans la relation clé primaire-clé étrangère
- 7. Contrainte de clé étrangère MySQL - Colonne entière
- 8. sqlite: clé primaire multi-colonne avec une colonne d'incrémentation automatique
- 9. Différence de performances SQL Server avec une clé primaire à une ou plusieurs colonnes?
- 10. besoin d'aide dans la clé primaire et la clé étrangère
- 11. Mise en veille prolongée: clé étrangère est la clé primaire
- 12. Comment mapper une colonne de clé étrangère dans nhibernate?
- 13. Clé étrangère composée avec colonne nullable
- 14. Clé primaire multi-colonne dans MySQL 5
- 15. Clé étrangère conditionnelle à plusieurs tables
- 16. Django - Clé primaire de colonnes multiples
- 17. Ruby on Rails - Clé primaire et étrangère
- 18. Problème de clé étrangère MySQL
- 19. POJOs pour la clé primaire composite à partir de la clé étrangère
- 20. Ruby on Rails ActiveRecord: problème de chargement hâtif avec clé étrangère et clé primaire
- 21. avec Interrogation clé étrangère
- 22. hibernate composite clé primaire contient une clé étrangère composite, comment mapper
- 23. Beaucoup-plusieurs sans clé primaire
- 24. Création d'une clé primaire sur deux colonnes
- 25. varchar() clé primaire ou clé primaire int?
- 26. SQL Server sélection clé primaire de la table où la clé contient plusieurs colonnes
- 27. Choix d'une clé primaire pour plusieurs relations
- 28. Sélection de toutes les lignes dont la clé étrangère pointe vers une clé primaire spécifique?
- 29. Mysql insert avec clé étrangère se référant à id primaire
- 30. Ajout de la contrainte de clé étrangère à la clé primaire 'partielle' dans PostgreSQL