Développeurs et concepteurs de bases de données, salut!Problèmes avec la conception du schéma de base de données
Je conçois un schéma de base de données pour mon projet.
Le projet concerne les relations entre les «producteurs» et les «consommateurs». Mais si un «Producteur» peut être à la fois un «Utilisateur» et une «Organisation», alors un «Consommateur» peut être seulement un «Utilisateur» (même si ce n'est que maintenant). Si l'on considère le modèle objet de mon projet, il se compose principalement de deux interfaces de base - «Producteurs» et «Consommateurs». Les relations seront entre les instances des classes principales qui sont 'Organization' et 'User', ce qui est plus la classe 'Organization' implémente l'interface 'Producer' et la classe 'User' implémente les interfaces de 'Producer' et 'Sonsumer'. Par exemple, pour une certaine période d'utilisation de mon application, certains utilisateurs doivent être en mesure de vendre des articles à d'autres utilisateurs, et être en mesure d'acheter des produits de n'importe qui.
À l'avenir, je prévois d'intégrer les systèmes de paiement les plus demandés au projet. Dites-moi s'il vous plaît si vous avez l'expérience de travailler avec des systèmes de paiement, comment cela va changer le modèle et le schéma de base de données. Ai-je besoin d'ajouter les entités «entité légale» et «individu»?
J'ai conçu le diagramme ER selon la description ci-dessus, mais il présente plusieurs inconvénients.
Tout d'abord, il n'y a pas de correspondance complète entre ER-description et la description UML. Ai-je besoin d'allouer des tables détachées pour les interfaces? Je ne sais pas. En effet, dans ce cas, selon la description ER, on peut dire que le «producteur» et le «consommateur» sont des superclasses d '«organisation» et d' «utilisateur». Mais en fait ce ne sont que des interfaces.
Deuxièmement, j'ai besoin de la conception la plus simple pour fournir l'accès à l'espace de stockage suffisamment flexible, sans 'JOIN' inutile. Peut-être que je devrais abandonner complètement les implémentations d'interfaces? Mais je suis tout pour utiliser la richesse de POO. Est-il possible d'utiliser des implémentations d'interfaces au niveau de la base de données? Je sais que l'héritage peut être utilisé. Mais je ne sais pas comment ces astuces vont affecter la productivité - à cause de tous les projets précédents ne nécessitaient pas l'utilisation des superclasses et des interfaces. J'utiliserai PostgreSQL comme SGBD relationnel.
Veuillez partager votre expérience et les implémentations de schémas de base de données réussies.
MISE À JOUR
Si j'attribuer des rôles pour les tables de producteur »et « consommateur », alors je vais devoir leur donner des attributs caractérisant l'utilisateur de« entités et « Organisation ». D'une part, si le nombre de rôles augmente, alors le nombre d'attributs augmente. Ce chemin entraîne la congestion des attributs des tables. Et certains attributs pour différents rôles seront conformes aux valeurs NULL. D'un autre côté, un attribut pour un rôle peut se conformer à plusieurs attributs pour un autre rôle. Par exemple, l'attribut 'nom' d'une entité 'Organisation' est conforme aux attributs 'prénom', 'middlename', 'nom' et 'nom d'utilisateur' pour une entité 'Utilisateur'. Troisièmement, je veux toujours séparer les modèles «Producteur», «Organisation», «Utilisateur» et «Consommateur» les uns des autres.
Ce que je pense que vous luttez avec est le sujet des «rôles». C'est un problème très commun. Une personne peut jouer plusieurs rôles. Cela ne fait pas d'une personne une sorte de rôle parce que cela signifie que cela doit toujours être le cas. Vous pouvez trouver que la création d'une relation de jeu de rôle peut résoudre le problème, mais je n'ai pas eu le temps d'analyser votre problème avec attention. Vous pouvez également constater que les entités qua (par exemple, une personne en tant que producteur) sont utiles pour conserver l'historique et d'autres faits. –
Tricky, en effet. Ce que Jim dit est juste. Je pourrais examiner cela plus tard dans la soirée (à moins que Jim ne fournisse une bonne réponse). –
Je pense que vous posez trop de questions à la fois, en fait. Je compte quatre questions explicites et plusieurs autres questions implicites. Tout provient d'un modèle inexact de ce qui existe dans le domaine du problème. Je vous suggère de régler ce problème. L'UML et l'ER peuvent alors facilement s'aligner avec cela. En fait, un modèle UML peut constituer la base de votre POO et de votre base de données. –