|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||
|
Invité régulier
![]() Inscription : décembre 2006 Messages : 18 ![]() |
Bonjour,
ça fait quelques jours que je débute avec MS sql-server2008. et je commence à avoir des problemes. En effet, j'essaye d'implementer un exemple simple dont voici le MCD: [ville]---0,1---(est capitale de)----1,1----[pays] [ville]---1,1---(fait partie de)------1,n----[pays] -un pays a une seule capitale et une ville est soit une capitale soit non. -un pays a plusieurs villes, une ville appartient a un seul pays. avec: ville(IDv,nomVille) pays(IDp,nomPays) en passant au relationel on aura: ville(IDv,nomVille,#IDp) pays(IDp,nomPays,#IDv) j'ai créé la petite bdd sous sql, j'ai mis les relations entre les tables. Mais quand j'essaye de "remplir" les tables avec la requette suivante: Code :
Citation:
|
|||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
Je pense comprendre ton problème (référence circulaire), mais ton exemple m'interpelle : Tu veux inserer la ville de Marseille (merseille ?) dans la table Ville, rattachée au pays ayant l'ID 15. Je suppose donc que ta table Pays est déjà peuplée avec la France, ID=15 ? (en fait, c'est pour insérer la France, que tu aurais dû avoir un problème, tant que Paris n'existe pas dans la table des villes, et pour insérer Paris dans la table des Villes, tant que La France n'existe pas dans la table des pays...) Donc : As-tu dans ta table "Pays" une ligne avec un ID=15 ? |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : décembre 2006 Messages : 18 ![]() |
Marseille oui désolé
Vous avez compris mon problème! mais maintenant la bdd est vide ...! même si je commence par insérer France dans pays, j'ai le même problème vu que (comme vs avez mentionné) paris n'existe pas dans ville ..... |
|
|
00
|
|
|
#4 | ||||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Je voit pas le problème, sauf que vous devez "ouvrir" la cardinalité :
Code :
Code :
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
||||
|
00
|
|
|
#5 |
|
Membre chevronné
![]() ![]() |
Salut
A partir du moment où une ville n'appartient qu'à un pays, pourquoi ne pas changer la structure des tables ville en ajoutant une colonne "estcapitale bit default(0)" à ville et enlevant la relation le fk de pays sur ville? On me dira pourquoi ne pas mettre le tout dans une seule table?
__________________
Le monde est trop bien programmé pour être l’œuvre du hasard… |
|
00
|
|
|
#6 | |
|
Membre Expert
![]() |
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#7 | |
|
Membre Expert
![]() |
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#8 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
En effet l'Afrique du Sud a trois capitales :
- Pretoria : administrative - Le Cap : législative - Bloemfontein : judiciaire @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#9 |
|
Membre Expert
![]() |
Oui c'est un cas extrême mais d'autres pays ont deux capitales:
http://fr.wikipedia.org/wiki/Liste_d...tales_du_monde
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#10 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Et l'état de Nauru n'en a pas !
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#11 | |
|
Invité régulier
![]() Inscription : décembre 2006 Messages : 18 ![]() |
Citation:
merci aux autres réponses ^^ |
|
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
avec une telle solution, tu risque d'avoir :
des pays sans capitale des pays avec plusieurs capitales a moins de mettre des contraintes check/triggers, qui seront beaucoup moins performantes que des contraintes d'integrité referentielles. La solution que t'a proposée SQLPro est la plus proche de ton modèle actuel, et à mon avis meilleur. Tu pourrais même peupler complètement ta table pays avec tous les pays, peupler ta table ville avec toutes les capitales, et ensuite remettre cette contrainte d’intégrité ! Je pense que ça serait plus performant comme ça ! |
|
|
00
|
|
|
#13 | |
|
Membre Expert
![]() |
Citation:
Mauvaise idée selon moi: durant ce temps, ta base risque de perdre son intégrité...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
non, je veux dire ne pas la mettre !
les pays ne changent pas tous les quatre matins, et je pense qu'il peut être utile de peupler complètement la table pays, ainsi que la table ville pour les capitales. ensuite placer les FK. Mais bon, dans la mesure ou à mon sens il n'y a pas de solution 100% propre pour ce genre de cas, il faut voir en fonction du besoin (par exemple, si l'IHM ne permet pas l'ajout de pays, le problème ne se pose pas |
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() |
Ok dans le cas ou les deux tables seront alimentés en One Shotà l'init de l'appli par exemple.
Daccord avec toi... Mais.... parfois les pays sont renomés où changent de capitale... comme en birmanie par exemple ( ok c'est rare ).
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Ces contraintes ne posent aucun problème pour renommer un pays, ou pour changer sa capitale. C'est juste pour la création d'un pays que cela pose problème... ce qui arrive encore moins souvent
donc comme je disais, cela dépend du besoin, mais si comme je le pense la table pays est gérée "à la main", je pense que le modèle initial de tix116 est le bon, et qu'il suffit alors de placer la contrainte FK sur la capitale une fois les tables peuplées. |
|
|
00
|
|
|
#17 |
|
Membre chevronné
![]() ![]() |
salut
Q:Avec le premier modèle, qu'est ce qui empêche d'avoir un pays sans capitale? R:2 insertions + 1 update Or avec le deuxième modèle, 2 insertions suffisent. Questions: Quelle est la capitale de l'Afrique du Sud?
__________________
Le monde est trop bien programmé pour être l’œuvre du hasard… |
|
00
|
|
|
#18 |
|
Membre Expert
![]() |
Le premier modèle? le votre?
Vous aviez votre FK en NOT NULL... donc impossible d'avoir un pays sans capitale.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com