Condividi tramite


Cenni preliminari sui riferimenti tra database

Aggiornamento: novembre 2007

È possibile creare o importare oggetti di database che fanno riferimento a oggetti presenti in altri database. I riferimenti tra database richiedono che venga definito un riferimento corrispondente nelle proprietà del progetto di database. Se si fa riferimento a oggetti contenuti in altri database ma non si definiscono i riferimenti corrispondenti nel progetto, verranno visualizzati degli avvisi. Per ogni database a cui si fa riferimento, è possibile definire le variabili SETVAR che corrispondono al server e al database desiderati. Quando si modifica una definizione di oggetto in modo da includere il riferimento, è possibile definirla utilizzando tali variabili al posto dei nomi espliciti del server e del database. Quando si compila il progetto di database, le variabili vengono sostituite dai valori specificati.

Nota:

Per rendere i riferimenti tra database specifici per una particolare configurazione della build, è necessario definire le variabili SETVAR in termini di variabili di MSBuild. Ad esempio, è possibile utilizzare un insieme di variabili di MSBuild quando si compila e si distribuisce un progetto di database a un server temporaneo e un altro insieme quando si compila e si distribuisce lo stesso progetto a un server di produzione. Se si definiscono le variabili SETVAR per un riferimento tra database in termini di nomi di server e database, il riferimento funzionerà allo stesso modo, indipendentemente dalla configurazione della build specificata.

Scenari per i riferimenti tra database

In Visual Studio Team System Database Edition vengono supportati gli scenari seguenti:

  • È stato creato un progetto di database ed è stato importato lo schema di un database esistente. Lo schema contiene oggetti che fanno riferimento a oggetti presenti in uno o più database. Nelle proprietà del progetto, si definisce un riferimento corrispondente e si sostituiscono i nomi espliciti del server e del database con le variabili SETVAR. A causa di questa definizione, i riferimenti tra database possono essere convalidati in fase di progettazione. È inoltre possibile distribuire il progetto di database a un ambiente di sviluppo isolato, dove il nome del server di destinazione è differente dal nome del server di destinazione del proprio ambiente di produzione.

  • Si dispone di un progetto di database contenente riferimenti tra database che utilizzano le variabili SETVAR per identificare i server e i database. Si desidera modificare i nomi di tali variabili e aggiornare le definizioni di oggetto che contengono tali riferimenti.

  • Si desidera fare riferimento a schemi del database aggiuntivi dal progetto di database che si sta sviluppando. Si desidera condividere con il team solo quegli schemi, senza dovere condividere anche gli altri progetti di database. È possibile aggiungere un riferimento ai metafile del database (.dbmeta) per gli altri progetti e controllare solo i metafile nel controllo della versione. Tramite questo approccio, è possibile limitare l'accesso ai progetti di database che contengono gli schemi ai quali si desidera fare riferimento. Utilizzare inoltre questo approccio se si desidera distribuire un progetto di database ma non i progetti che dipendono da quest'ultimo.

È possibile utilizzare ilrefactoring del database per eseguire attività aggiuntive con i riferimenti tra database. Per ulteriori informazioni, vedere Procedura: rinominare i riferimenti a un server o a un database.

Riferimenti a progetti di database e metafile

Quando si aggiunge un riferimento a un progetto di database, è possibile specificare un altro progetto di database o un metafile, che viene generato quando si compila un progetto di database.

È necessario fare riferimento a un altro progetto di database se:

  • È necessario apportare delle modifiche sia agli schemi del database che conterrà il riferimento che al database a cui si fa riferimento. Quando si distribuisce il progetto di database che contiene il riferimento, verrà distribuito anche il progetto di database a cui si fa riferimento.

Fare riferimento a un metafile del database se:

  • È necessario fare riferimento a un database il cui progetto non è nella soluzione corrente.

  • È necessario distribuire un singolo progetto senza distribuire i progetti da cui dipende.

  • Si fa riferimento a uno schema del database che probabilmente non cambierà. In questo scenario, è possibile controllare il metafile del database nel controllo della versione.

Limitazioni dei riferimenti tra database

Quando si importa uno schema del database, i riferimenti ad altri database nelle definizioni di oggetti generano degli avvisi poiché il progetto di database non può convalidare tali riferimenti prima che vengano distribuiti. Dopo avere definito i riferimenti del database nelle proprietà del progetto, è possibile convalidare le definizioni di oggetto e risolvere gli avvisi. È quindi possibile aggiornare le definizioni di oggetto sostituendo i nomi dei server e dei database con delle variabili. È anche possibile utilizzare il refactoring per eseguire questa sostituzione. Per ulteriori informazioni, vedere Procedura: creare riferimenti tra database e Procedura: rinominare i riferimenti a un server o a un database.

Le variabili e i valori per i server e i database a cui si fa riferimento non sono specifici di una configurazione della build. Per specificare al prompt dei comandi il server e il database è necessario fare riferimento ad essi in termini di variabili di MSBuild che possono essere sostituite al momento della distribuzione.

Vengono inoltre applicate le limitazioni seguenti:

  • È possibile aggiungere un riferimento a un database solo se quest'ultimo dispone di un progetto di database corrispondente.

  • È necessario compilare un progetto di database prima di aggiungere un riferimento al metafile del progetto di database.

  • È necessario compilare i progetti di database a cui si fa riferimento in modo che i riferimenti tra database si risolvano senza avvisi.

  • Se si modifica la configurazione della build della soluzione o dei progetti di database a cui si fa riferimento, potrebbe essere necessario ricompilare la soluzione in modo che i riferimenti tra database si risolvano senza avvisi.

  • Se si fa riferimento a un oggetto in un progetto di database su un altro server, è necessario definirlo come server collegato sul server di destinazione. Per ulteriori informazioni, vedere Procedura: creare riferimenti tra database.

  • Non è necessario un riferimento tra database per riferirisi al database master.

  • I riferimenti che includono variabili SETVAR devono sempre prendere il modulo "[$(NomeVariabile)]". Se si omettono le parentesi quadre, potrebbe non essere possibile distribuire il progetto di database.

  • I nomi delle variabili SETVAR devono essere univoci. Se il server ha lo stesso nome del database, è necessario definire delle variabili che hanno nomi differenti ma che risolvono lo stesso valore.

Considerazioni sulla sicurezza

Il metafile creato quando si compila un progetto di database contiene le informazioni dello schema per quel progetto. È necessario limitare l'accesso al metafile per proteggere le informazioni dello schema. È possibile condividere metafile con il team controllandoli nel controllo della versione, piuttosto che distribuendoli al server di destinazione. Se il progetto di database per il database a cui si fa riferimento è nella stessa soluzione, altri sviluppatori del progetto potranno accedere quando eseguiranno la sincronizzazione al controllo della versione e compileranno la soluzione.

Esempio

Se si dispone di due progetti di database, ReportDb e DependentDb, è possibile fare riferimento agli oggetti contenuti in DependentDb da ReportDb. Iniziare aggiungendo un riferimento nelle proprietà del progetto di database DependentDb e definire le variabili come segue:

  • RefServer

  • RefDatabase

Il valore per RefServer è il nome del server su cui risiede DependentDb. Il valore per RefDatabase è il nome del database di destinazione distribuito dal progetto DependentDb. In questo esempio, RefServer ha il valore StageSvr e RefDatabase ha il valore DepDb.

È possibile aggiungere a ReportDb una visualizzazione che seleziona tutte le colonne della tabella Dipendente nel DependentDb che viene distribuito al database denominato DepDb sul server denominato StageSvr. Creare la definizione di oggetto per tale visualizzazione come segue:

CREATE VIEW [dbo].[DependentView]
AS
SELECT * FROM [$(RefServer)].[$(RefDatabase)].[dbo].[Employee]
;

Vedere anche

Attività

Procedura: rinominare i riferimenti a un server o a un database

Concetti

Cenni preliminari sull'utilizzo di oggetti di database

Panoramica sulla terminologia di Database Edition

Altre risorse

Procedura: creare riferimenti tra database