Errore nella relazione tra due tabelle in sql server 2005

venerdì 13 giugno 2008 - 11.09

trinity Profilo | Guru

Ciao ragazzi,
ho creato due tabelle in sql server 2005 una si chiama tab_datialbergo e contiene i record dell'anagrafica alberghi e un'altra tabella si chiama schedineps che contiene i movimenti di questi alberghi.
Io volevo creare una relazione tra queste due tabelle al fine di ottimizzare e migliorare le join che andrò ad eseguire.
Lavorando sulla tabella schedineps nel momento che creo la relazione e la vado a salvare mi esce questo messaggio di errore:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ora vi posto i codice delle due tabelle:

TABELLA SCHEDINEPS

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

TABELLA TAB_DATIALBERGO

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

cosa posso fare?

Grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

speedx Profilo | Junior Member

Hai già popolato le due tabelle?
in questo caso il problema potrebbe essere sui dati delle colonne a cui applichi la relazione

//// Marcello C.

lbenaglia Profilo | Guru

>Io volevo creare una relazione tra queste due tabelle al fine
>di ottimizzare e migliorare le join che andrò ad eseguire.
Se non ricordo male, in passato ti ho già spiegato che i constraint FK NON SERVONO a "migliorare le join" ma semplicemente impostano un vincolo che fa in modo che non esistano "figli orfani".

>Lavorando sulla tabella schedineps nel momento che creo la relazione
>e la vado a salvare mi esce questo messaggio di errore:
>
>Tabella 'Tab_datiAlbergo' salvata
>Tabella 'SchedinePS'
>- Impossibile creare la relazione 'FK_SchedinePS_Tab_datiAlbergo'.
>L'istruzione ALTER TABLE è in conflitto con il vincolo FOREIGN
>KEY "FK_SchedinePS_Tab_datiAlbergo". Il conflitto si è verificato
>nella tabella "dbo.Tab_datiAlbergo", column 'codalb' del database
>"Questura".

Mi sembra di capire che vuoi definire una relazione 1 a molti tra dbo.Tab_datiAlbergo e dbo.SchedinePS:

USE tempdb; CREATE TABLE dbo.Tab_datiAlbergo( codalb int NOT NULL CONSTRAINT PK_Tab_datiAlbergo_1 PRIMARY KEY(codalb) ); CREATE TABLE dbo.SchedinePS( codalbergo int NOT NULL, AnnoGestionale int NOT NULL, NSchedina int NOT NULL, IdComponente int NOT NULL, CodAlloggiato int NOT NULL, CONSTRAINT PK_SchedinePS PRIMARY KEY( codalbergo ASC, AnnoGestionale ASC, NSchedina ASC, IdComponente ASC, CodAlloggiato ASC )); ALTER TABLE dbo.SchedinePS ADD CONSTRAINT FK_SchedinePS_Tab_datiAlbergo FOREIGN KEY(codalbergo) REFERENCES dbo.Tab_datiAlbergo(codalb); /* Output: Command(s) completed successfully. */ DROP TABLE dbo.SchedinePS, dbo.Tab_datiAlbergo;

Come vedi non ci sono problemi di sorta...

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

trinity Profilo | Guru

ok grazie ma per migliorare le join mi serve a questo punto saper bene indicizzare le colonne che verrano utilizzate nelle stesse join?


Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

lbenaglia Profilo | Guru

>ok grazie ma per migliorare le join mi serve a questo punto saper
>bene indicizzare le colonne che verrano utilizzate nelle stesse
>join?
Si, ma l'indicizzazione di una colonna è indipendente dall'applicazione di un constraint FK su di essa
A titolo generico, ricorda che a differenza di un constraint PRIMARY KEY, il constraint FOREIGN KEY NON crea automaticamente un indice, quindi è opportuno indicizzare le colonne sulle quali è applicato il constraint FK.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5