2016-06-29 2 views
0

J'ai conçu une base de données pour un programme de gestion de transport. Et une partie semble être OK, mais je ne suis pas sûr comment stocker une combinaison de Package, Price et Version à un projet, pour éviter une référence circulaire. Une simple explication de la base de données: Un package peut avoir un à plusieurs prix et a une ou plusieurs versions. Donc, les prix sont indépendants de la version. Par exemple. Si vous avez 2 versions, elles ont le même prix. Une version peut avoir un à plusieurs équipements et un équipement peut appartenir à de nombreuses versions. Un utilisateur filtre sur Package et choisit un package, après quoi il choisit la version et le prix et les stocke dans Project_Has_Packages. Comme vous le voyez sur la photo. Mon approche était, que le nom de paquet vient seulement de la table de paquet et des noms de version et de prix des tables spécifiques. Dans la table de tarification et la table des versions, j'ai besoin de PackageName pour rendre les entrées uniques, car il se peut que vous ayez "Package1" et "Version1" et "Version2" et "Package2" avec "Version1" et " Version 2". Les versions sont différentes en raison de l'équipement différent, qui appartient à la version. Si je rend UniqueName VersionName ("ver1 Pack1") alors la base de données n'est plus normalisée. Y at-il une possibilité d'éviter la référence circulaire et comment puis-je changer la conception pour éviter cela? Penser toute la journée à ce sujet et je ne peux plus voir le bois pour les arbres.Comment puis-je éviter la référence circulaire dans la conception de ma base de données?

+1

TL; DR; malheureusement la vie moderne m'a donné la durée d'attention d'un moucheron – Strawberry

Répondre

1

Le principal problème avec votre conception de table est que vous utilisez des données réelles (chaînes) pour les clés. Cela vous mord dans la crosse maintenant et continuera à le faire.

Essayez d'ajouter un ID int incrémentation automatique en tant que clé primaire pour chaque table et les clés étrangères correspondantes dans les tables chiöd.

Je crois que le "problème" avec les clés circulaires est mote après cela ?!

+0

Vous avez raison! Je n'ai pas vu ça. VersionName et PricingName ne sont pas une expression unique contrairement à PackageName. Je viens d'ajouter en tant que clé VersionID et PriceID, et la référence circulaire est également résolue et le PackageName que j'utilise comme clé étrangère non identifiante. Le nom du package reste en tant que chaîne car je souhaite que l'expression soit unique. Merci de votre aide! – StefanS