Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [SQL Server] Consiglio su integrità referenziale

    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???

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    potresti sdoppiare la tabella,
    cioe RimborsiVenditori e RimborsiFamiliariVenditori;
    al limite poi ti fai una vista che fa la union delle due tabelle!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  3. #3
    potresti sdoppiare la tabella, cioe RimborsiVenditori e RimborsiFamiliariVenditori; al limite poi ti fai una vista che fa la union delle due tabelle!
    Volevo evitare di fare questa cosa..

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    28
    E se spostassi il problema?
    Unifica le tabelle dei familiari e dei rivenditori (se hanno gli stessi campi: id, nome, cognome ecc...) e aggiungi un campo: titolare.
    Se questo campo è vuoto significa che l'id si riferisce ad un rivenditore, altrimenti ad un familiare di quel rivenditore.
    Inoltre, se vuoi un doppio controllo, puoi aggiungere anche un campo flag che sia checked o meno a seconda che la persona sia un rivenditore o un familiare...

    Altrimenti puoi operare anche così: aggiungi un solo campo "titolare" vero o falso e lo metti come identificatore univoco della tabella insieme all'IDAssistito, così non possono esistere due idassistito con il flag a true o due id assistito con i flag a false, visto che il caso limite è quello di avere massimo due id corrispondenti...
    Poi esegui i controlli necessari, se è checked vai a controllare sui rivenditori, se non è checked vai sui familiari.
    "Si pronuncia Aigor"
    "Ma mi avevano detto Igor"
    "beh, avevano torto, non le pare?"

  5. #5

    Re: [SQL Server] Consiglio su integrità referenziale

    Originariamente inviato da luffa
    Buongiorno a tutti. Ho 2 tabelle realizzate così:
    .....
    Non ho letto approfonditamente le risposte che sono già state fatte quindi chiedo venia se ripeto qualcosa già detto.
    A prima vista, non dovresti avere due tabelle che hanno + o - gli stessi campi. In questo caso, mi sembra che tu debba creare una unica tabella es. Persone in cui vi sarà l'IDPersona primary key e IDParent foreign key. La foreign key, punta alla stessa tabella Persone (una tabella che quindi si autoreferenzia) e ti permette così di costruirti le tue gerarchie di persone

    UnRivenditore (idpersona=1, idparent=-1)
    UnaMamma(idpersona=18, idparent=1)
    UnoZio(idpersona=121, idparent=1)
    UnaltroRivenditore (idpersona=4, idparent=-1)
    UnaltraMamma(idpersona=18, idparent=4)
    UnaltroZio(idpersona=121, idparent=4)

    Per identificare il tipo di persona, puoi utilizzare una tabella di lookup es. TipiPersone (IDTipoPersona int pk, TipoPersona varchar) e inserire una foreign key nella tabella Persone es. IDTipoPersona references TipiPersone(IDTipoPersona).
    Saluti a tutti
    Riccardo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.