Newsgroup: it.comp.software.database
Titolo: Vincoli di partecipazione. URGENTE.

Il mio problema nasce da un contesto molto più ampio rispetto al seguente
esempio che proporrò per illustrarlo.
Supponiamo due entità RUBRICHE (idrubrica, responsabile, ..) e
UTENTI(idutenti, cognome, ..) dove idrubrica e idutenti sono rispettivamente
le chiave primarie. Le due tabelle sono collegate dalla relazione APPARTIENE
dove più Utenti  possono appartenere alla stessa Rubrica, quindi abbiamo una
relazione 1 a N fra RUBRICHE e UTENTI. Inoltre, le entità UTENTI e RUBRICHE
hanno un vicolo di partecipazione totale con la relazione APPARTIENE , cioè
un Utente può esistere solo se appartiene a una Rubrica e una rubrica può
esistere solo se contiene almeno solo un utente.
Lo script che ho generato è il seguente (per ORACLE):
-- ============================================================
--   Table: RUBRICA
-- ============================================================
create table RUBRICA
(
    IDRUBRICA     NUMBER                 not null,
    RESPONSABILE  VARCHAR2(50)           null    ,
    constraint PK_RUBRICA primary key (IDRUBRICA)
)
/
-- ============================================================
--   Table: UTENTI
-- ============================================================
create table UTENTI
(
    IDUTENTI      NUMBER                 not null,
    IDRUBRICA     NUMBER                 not null,
    COGNOME       VARCHAR2(50)           null    ,
    constraint PK_UTENTI primary key (IDUTENTI)
)
/
-- ============================================================
--   Index: UTENTI_RUBRICA_FK
-- ============================================================
create index UTENTI_RUBRICA_FK on UTENTI (IDRUBRICA asc)
/
alter table UTENTI
    add constraint FK_UTENTI_UTENTI_RU_RUBRICA foreign key  (IDRUBRICA)
       references RUBRICA (IDRUBRICA)
/
DOMANDA:
La condizione not null per l'attributo IDRUBRICA nella tabella UTENTI ci
garantisce che ogni utente appartiene obbligatoriamente a una rubrica, come
faccio a ottenere il vicolo che una rubrica può esistere solo se contiene un
utente?
Ringrazio anticipatamente chiunque possa darmi una soluzione o riferimenti
da leggere a tal proposito.
CIAO.

 utente?
Se ci pensi bene una cosa del genere "automatica" non puo' esistere, in
quanto tu ti ritrovi nella condizione in cui A puo' esistere solo se esiste
B, ma B puo' esistere solo se esiste A. A questo punto, dato che non puoi
crearli contemporaneamente, non puoi creare nessuno dei due.
Faccio un esempio: vuoi creare una nuova rubrica, la nuova rubrica (proprio
perche' e' nuova), non contiene nessun utente (ovvero nessun utente puo'
avere IDRubrica che punta alla nuova rubrica), quindi non potresti crearla
se implementi tale vincolo. D'altra parte non puoi nemmeno creare un utente
che punta ad una rubrica che non c'e' (proprio per il vincolo di esistenza).
Quindi ti trovi in una posizione di stallo: non puoi creare ne' utenti ne'
rubriche.
Davide

Forse dico una vaccata, ma che ne pensi di:
Un trigger che controlla alla cancellazione di un utente se nella rubrica di
appartenenza vi siano altri utenti altrimenti cancella anche la rubrica?
Altrimenti non mi viene in mente nulla anche xchè una terza tabella composta
dai campi: IDRubrica, IDUtente ti risolverebbe il problema rispetto al fatto
che facendo una selezione su questa tabella non sarebbe visibile una rubrica
senza utenti(però rimarebbe cmq nella tabella Rubrica dove ci sono i dati
relativi le rubriche senza utenti!).
Boh? Non mi viene in mente altro, fammi sapere.
Ciao Tiziano.