IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

[2008] Clé étrangère sur une vue ?


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 28
    Par défaut [2008] Clé étrangère sur une vue ?
    Bonjour à tous,

    Je me pose actuellement une question sans trouver ma réponse sur le web ...

    J'ai deux base de données différentes mais fonctionnant toutes les deux sous SQL Server 2008, on va dire base1 et base2.

    Les données de ma base 2 seront accessibles grâce à l'utilisation de vue au sein de ma base 1.

    Mais dans le but d'avoir des données cohérentes dans ma base 1, je voudrais réaliser un clé étrangère sur les données extraites de ma vue (Code de l'élément, etc ...).

    Donc, est il possible de réaliser une clé étrangère sur une vue ?

    Si vous connaissez un autre moyen, je suis preneur.

    Merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Les données de ma base 2 seront accessibles grâce à l'utilisation de vue au sein de ma base 1.
    Pourquoi ne pas placer la vue dans votre base 1 et la requêter depuis la base 2 ?
    Avec un peu de chance vous pourrez probablement l'indexer et gagner en performances ...

    Donc, est il possible de réaliser une clé étrangère sur une vue ?
    Non, pour la simple et bonne raison qu'une vue n'est pas une table.
    Les relations d'une base de données n'existent qu'entre les entités d'un projet de base de données.
    Dans le modèle physique, cela se traduit respectivement par des contraintes d'intégrité entre les tables de la base de données.
    Une vue n'existe ni dans le modèle conceptuel de toute base de données, ni dans le modèle physique, mais seulement dans le modèle externe de données.

    Si vous connaissez un autre moyen, je suis preneur.
    Réalisez la vue dans la bonne base de données.
    Si une contrainte de clé étrangère doit exister entre vos base de données, c'est qu'il y a une erreur dans votre modèle de données.
    Si vous voulez néanmoins réaliser ce contrôle, vous n'aurez pas d'autre choix que d'implémenter un trigger (que vous pouvez attacher à une vue ou une table).

    @++

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 28
    Par défaut
    Merci pour les réponse rapides elsuket,

    Comme je m'en doutais, ce n'est pas réalisable, (ca aurait été trop beau ).

    Je me suis déjà pencher sur l'utilisation de trigger pour vérifier les données de présentes dans une autre table et je vais donc réutiliser ce système.

    Bonne journée à tous.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Il serait beaucoup plus simple et performant que vos deux bases n'en fasse qu'une. Pour cela il suffit souvent de placer chacune des bases dans un schéma particulier.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 28
    Par défaut
    Le soucis est que l'une des bases de données n'a pas été développé par notre entreprise. Car il s'agit d'une base de donnée pour notre logiciel de paie et cette base a été développé par une grosse entreprise dans le domaine de la gestion.

    Donc je ne pense pas pouvoir créer mes différentes tables dans la base de données du logiciel de gestion, ni même la modifier.

    De plus les informations que j'ai besoin dans la base de donnée du logiciel de gestion seront vraiment minimes car j'ai seulement besoin de récupérer principalement un code (clients, lieux des clients, etc.)

    Donc le trigger va être surement la meilleur solution.

  6. #6
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 206
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Avant d’apporter quelques commentaires concernant cette discussion, je fournis quelques précisions ayant trait au vocabulaire. Dans le cadre du Modèle Relationnel de Données, on n’utilise pas le terme table, qui reste du ressort de SQL. En effet, étant mathématiciens, les théoriciens du Modèle relationnel ont toujours utilisé le terme relation (Ted Codd, Ron Fagin, Claude Delobel, Jeff Ullman, David Maier, j'en passe et des meilleurs).

    A partir de 1995, Date et Darwen ont utilisé le concept de variable de relation (relation variable, en abrégé relvar) pour que la relation proprement dite conserve strictement sa propriété mathématique d’invariance (alors que 25 ans plutôt, Ted Codd utilisait le terme « time-varying relation » : « The totality of data in a data bank may be viewed as a collection of time-varying relations. »).

    Tout comme dans un programme une variable X de type entier peut successivement prendre des valeurs différentes qui sont des entiers, une variable R de type relation peut successivement prendre des valeurs différentes qui sont des relations.

    Selon le contexte, la table SQL correspond donc soit à la relvar, soit à la relation.

    Par ailleurs, une relvar est soit réelle (ou de base) ou virtuelle (vue). Le terme relvar est donc générique : une relvar réelle est une relvar et une relvar virtuelle est aussi une relvar (en notant que, lorsqu’il n’y a pas d’ambiguïté possible, on abrège le plus souvent relvar réelle en relvar).

    Une relvar réelle est une représentation de données physiquement stockées, elle est « matérialisée » si l’on peut dire. Par contraste, une vue n’est pas matérialisée, elle permet simplement de voir les données « matérialisées » de différentes manières. En tout cas, relvar réelle et vue sont des relvars.

    De la même façon, on pourrait concevoir qu’au sens générique du terme, une table SQL puisse être spécialisée est soit en une table de base soit en une vue.


    Citation Envoyé par elsuket Voir le message
    une vue n'est pas une table.
    Dans le sens de ce qui précède, une vue n’est pas une table de base mais j’ai envie de dire qu’elle est une spécialisation de la table considérée au sens générique. Ainsi, la vue système INFORMATION_SCHEMA.TABLES contient indifféremment les noms des tables de base et des vues, la colonne TABLE_TYPE permettant de savoir quel est le type de chaque « objet » nommé.


    Citation Envoyé par elsuket Voir le message
    Une vue n'existe ni dans le modèle conceptuel de toute base de données, ni dans le modèle physique, mais seulement dans le modèle externe de données.
    Faites-vous référence au niveau externe de l’architecture ANSI/SPARC ?
    En tout état de cause, je cite et traduis Chris. Date (cf. An introduction to Databases Systems, Chapitre 3, page 74) :
    « Dans le contexte relationnel, le terme vue a une signification particulière, différente de celle qu’on lui attribue dans le cadre de l’architecture ANSI/SPARC. Au niveau externe de cette architecture, la base de données est perçue comme une “vue externe”, définie par un schéma externe (et des utilisateurs différents peuvent avoir des vues externes différentes à leur disposition). Par contre, pour les systèmes relationnels, une vue est spécifiquement une relvar virtuelle, dérivée et nommée. Ainsi, l’homologue de la “vue externe” ANSI/SPARC est (typiquement) une collection de plusieurs relvars, où chacune d’elles est une vue au sens relationnel et où le “schéma externe” est constitué des définitions de ces vues. »


    Citation Envoyé par elsuket Voir le message
    Les relations d'une base de données n'existent qu'entre les entités d'un projet de base de données.
    Qu’entendez-vous par « Les relations d'une base de données » ? par « entités » ? « par projet de base de données » ?

    Par définition, une (valeur de) base de données relationnelle est une collection de relations (time-varying relations comme disait Codd).

    Mais comme en français le mot « relation » est ambigu, peut-être voulez-vous parler des associations-types entre entités-types décrites dans un modèle conceptuel de données (MCD) ?


    Citation Envoyé par elsuket Voir le message
    Dans le modèle physique, cela se traduit respectivement par des contraintes d'intégrité entre les tables de la base de données.
    Les contraintes d’intégrité relèvent du niveau logique et traduisent de manière formelle les règles de gestion de données du niveau conceptuel. On peut dire que ces contraintes relèvent de la logique formelle, et n’ont donc rien à voir avec le niveau physique où l’on met en œuvre les tablespaces, les index et tous autres objets dont les caractéristiques varient très sensiblement d’un SGBD à l’autre et ne sont évidemment pas définis dans le Modèle Relationnel de Données (dans la norme SQL non plus me semble-t-il).


    Citation Envoyé par elsuket Voir le message
    Citation Envoyé par TeK55 Voir le message
    est il possible de réaliser une clé étrangère sur une vue ?
    Non, pour la simple et bonne raison qu'une vue n'est pas une table.
    La question posée par TeK55 est pertinente. En effet, dans le cas du Modèle Relationnel de Données la réponse est positive. Date et Darwen précisent bien :
    « Referential constraints are usually thought of as applying to real relvars only. In the Manifesto, by contrast, we regard them as to applying to virtual relvars as well. » Cf. Databases, Types, and the Relational Model The Third Manifesto (Third Edition, page 219).
    Dans le cas du Modèle SQL, la réponse est aujourd’hui négative, mais un jour peut-être ?
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Faites-vous référence au niveau externe de l’architecture ANSI/SPARC ?
    Pas directement dans ce que j'ai écrit, mais c'est bien ce que je sous-entendais
    Je voulais montrer à TeK55 qu'il n'est pas possible de créer des relations entre des vues, parce que je considère les vues comme une abstraction des données : dans la spécification d'une vue, on peut "encapsuler" des calculs d'aggrégats, des appels à des fonctions, des données de tables d'une autre base de données ...

    Comme une vue peut faire appel à des tables qui n'appartiennent pas à la même base de données, je trouve logique qu'il ne soit pas possible de spécifier des contraintes d'intégrité sur des vues, puisque celles-ci sont une abstraction des entités du monde réel.

    Dans le cas du Modèle SQL, la réponse est aujourd’hui négative, mais un jour peut-être ?
    Pourquoi pas mais je n'en vois pas les avantages directs

    @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Delete sur une vue 2008 => 2008 R2
    Par toto9o dans le forum Développement
    Réponses: 3
    Dernier message: 08/09/2011, 11h00
  2. Clé étrangère sur une vue
    Par lcaya dans le forum SQL
    Réponses: 9
    Dernier message: 07/07/2010, 11h04
  3. modéliser une table mapping ayant des clés étrangères sur des vues
    Par touftouf57 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 19/06/2010, 02h04
  4. Clé étrangère sur une Vue
    Par escafr dans le forum SQL
    Réponses: 6
    Dernier message: 12/06/2008, 08h16
  5. delete sur une vue: rule
    Par Bouboubou dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 18/05/2004, 18h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo