Consiglio su integrità referenziale

venerdì 17 ottobre 2008 - 10.10

luffa Profilo | Newbie

Buongiorno a tutti. Ho 2 tabelle realizzate così:

CREATE TABLE Rivenditori (
IdAssistito int IDENTITY(1,1) NOT NULL,

Cognome varchar(50) NOT NULL,
Nome varchar(50) NOT NULL,
-- Altri dati dati anagrafici...

PRIMARY KEY (IdAssistito)
)

CREATE TABLE FamiliariRivenditori (
IdAssistito int IDENTITY(1,1) NOT NULL,

Cognome varchar(50) NOT NULL,
Nome varchar(50) NOT NULL,
-- Altri dati dati anagrafici...

TitolareReferente int NOT NULL,

PRIMARY KEY (IdAssistito),

FOREIGN KEY (TitolareReferente) REFERENCES Rivenditori(IdAssistito)
ON DELETE CASCADE
)

La prima tabella, "Rivenditori", contiene i dati di alcuen persone che erogano un servizio metre la seconda, "FamiliariRivenditori", contiene i familiari (la moglie, i figli, ecc..) dei rivenditori. Infatti nella tabella "FamiliariRivenditori" vi è una chiave esterna che referenzia la tabella "Rivenditori"

Il consiglio che vorrei è su come realizzare una terza tabella, che dovrebbe referenziare entrambe.

CREATE TABLE Rimborsi
(
IdRimborso int IDENTITY(1,1) NOT NULL,
IdAssistito int NOT NULL,

-- Dati sul rimborso
Importo smallmoney NOT NULL,
DataRimborso smalldatetime NOT NULL,

PRIMARY KEY (IdRimborso),

-- FOREIGN KEY (IdAssistito) REFERENCES XXXXXXX(IdAssistito)
)

Questa tabella Rimborsi dovrebbe referenziare sia la tabella Rivenditori che FamiliariRivenditori. Come fare???

gabriel81 Profilo | Junior Member

ti serve referenziare per eseguire delle select oppure per gestire le operazioni di update e delete?

luffa Profilo | Newbie

Operazioni di SELECT

gabriel81 Profilo | Junior Member

Secondo me devi fare dei compromessi.
1. gestisci l'integrità dall'applicazione e metti nelle spese un campo int che stà per l'id dell'assistito (familiare o rivenditore che sia) e un campo tipo che determina se quell'id è relativo a rivenditore o familiare(campi non referenziati!!!!!!!!!!!).
2. O fai un tabellone unico degli assistiti, dove in ogni riga specifichi se è un familiare (e se sì di chi) oppure rivenditore.
Inoltre potresti fare 2 form diversi dove in uno inserisci le spese dei rivenditori e nell'altro quelle dei familiari.

Altre idee non me ne vengono, anche perchè se metti un campo di integrità deve poi essere sempre popolato e sempre correttamente.......
io userei la proposta 1


alx_81 Profilo | Guru

@luffa
Sinceramente il fulcro del discorso sta nel tipo di relazione che vuoi implementare, che ancora non mi è chiara.
Di che tipo è? 1:N o M:N? Uno a molti o molti a molti?

Prova ad illustrare meglio la situazione reale, perchè secondo me manca qualche passo..
Vorrei capire se i record dei famigliari possono essere anche nei rivenditori, ad esempio una famiglia in cui padre e madre sono rivenditori, sarebbero sia in rivenditori che in famigliari.. Cerca di essere più dettagliato nella situazione reale.

Ad esempio:

Ho un'anagrafica utenti e voglio definire una relazione tra questa anagrafiche e le relative province. Ogni utente può avere una provincia ma una provincia può avere legati più utenti (1:N). Oppure, ho una tabella attori ed una film. Un attore può prendere parte a più film, e un film può avere più attori (M:N)..
Cerca di approcciare in questo modo più "descrittivo" perchè dobbiamo capire che tipo di relazione ti serve. E quali siano le specifiche dell'analisi.
Ciao!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
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