2010-02-09 4 views
0

J'ai une table "Scholars", qui a beaucoup de clés étrangères à des tables de recherche comme des cours et des collèges. Lorsque je crée une vue sur cette table pour renvoyer un sous-ensemble des Scholars (par exemple ceux qui sont encore vivants), la vue ne semble pas avoir les mêmes clés étrangères que la table. Suis-je tout nouveau à SQL Server et pas sûr si je fais quelque chose de mal ou si c'est simplement comment c'est. La raison que je demande, c'est que nos clients utilisent le Générateur de rapports 2 pour créer des rapports et lorsqu'ils créent leurs requêtes à l'aide du concepteur de requêtes, s'ils utilisent la vue, le concepteur de requêtes ne connecte pas automatiquement la vue LivingScholars. , à la table des collèges.SQL Server: afficher pour conserver les clés étrangères de la table?

Merci pour toute aide, Robin

Répondre

1

Ce que vous voyez est normal.

Les vues ne peuvent pas contenir de clés étrangères. Il est utile de considérer une vue comme un bloc de SQL qui est "coupé et collé" par le serveur SQL dans vos requêtes chaque fois que vous l'utilisez.

Donc, si vous avez des champs dont vous avez besoin d'autres tables, dans ce scénario, il est souvent préférable de simplement les amener dans la vue elle-même. Vous ne souffrirez d'aucune diminution de vitesse pour cela. Faites juste une très large vue dont vos utilisateurs vont se rapporter. Ce sera plus facile pour vos rédacteurs de rapports, et comme je l'ai dit, vous ne souffrirez probablement pas d'une diminution des performances si vous vous joignez à des tables contenant des références de clé étrangère aux tables qui sous-tendent la vue.

Vous souhaiterez peut-être effectuer quelques vues, une pour chaque type principal de scénario de requête que vous attendez de vos rédacteurs de rapports.

+0

Merci Dave. C'est la réponse que je cherchais. Je vais aller de l'avant et faire une très large vue. Ainsi que quelques-uns plus ciblés. – Phaedrus

0

Je suis désolé si je ne comprends pas ... mais qu'est-ce que vous entendez par « afficher les clés étrangères »? Lorsque vous créez votre vue, vous devez le créer comme

SELECT  s.* 
      , additional cols 
FROM  Scholars s 
JOIN  Courses c 
ON   s.CourceID = c.ID 
.... 
and so on 
Questions connexes