Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643

    [MySql] Urgente qualche domandina

    Dopodomani devo presentare il progetto per base di dati.

    Si tratta di un sistema di gestione di aste online.
    Con MySql ho appena creato le 12 tabelle necessarie a rappresentare il mio schema relazionale e sono le seguenti:

    codice:
    create table UTENTE
    (
    User_Id varchar(20) not null primary key,
    Nome varchar(20) not null,
    Cognome varchar(20) not null,
    Data_Nascita date not null,
    Citta varchar(30) not null,
    Indirizzo varchar(50) not null
    ) type=InnoDB;
    
    
    create table INSERZIONE
    (
    Id_Oggetto int not null auto_increment primary key,
    Titolo varchar(60) not null,
    Descrizione text,
    Costo_Base float(4,2),
    Scadenza datetime,
    Compralo_Subito float(4,2),
    Id_Venditore varchar(20) not null references UTENTE(User_Id),
    Id_Categoria varchar(30) not null references CATEGORIA(Id_Categoria)
    ) type=InnoDB;
    
    
    create table FOTO
    (
    Id_Foto int not null auto_increment primary key,
    Titolo varchar(50) not null,
    Descrizione varchar(255) not null,
    Link_File varchar(255) not null,
    Id_Oggetto int not null,
    foreign key(Id_Oggetto) references INSERZIONE(Id_Oggetto)
    ) type=InnoDB;
    
    
    create table OFFERTA
    (
    Id_Offerta int not null auto_increment primary key,
    Partecipante varchar(20) not null,
    Id_Oggetto int not null,
    Valore_Offerta float(4,2) not null,
    Data datetime not null,
    foreign key (Partecipante) references UTENTE(User_Id),
    foreign key (Id_Oggetto) references INSERZIONE(Id_Oggetto)
    ) type=InnoDB;
    
    create table CATEGORIA
    (
    Id_Categoria int not null auto_increment primary key,
    Nome_Cat varchar(40) not null,
    Descrizione varchar(255) not null,
    Padre int references CATEGORIA(Id_Categoria)
    ) type=InnoDB;
    
    
    create table AMMINISTRATORE
    (
    Username varchar(20) not null primary key,
    Nome varchar(20) not null,
    Cognome varchar(20) not null,
    Citta varchar(30) not null,
    Indirizzo varchar(50) not null
    ) type=InnoDB;
    
    
    create table AMMINISTRA
    (
    Admin varchar(20) not null,
    Id_Categoria int not null,
    Inizio_Amministrazione datetime,
    foreign key (Admin) references AMMINISTRATORE(Username),
    foreign key (Id_Categoria) references CATEGORIA(Id_Categoria),
    primary key (Admin, Id_Categoria)
    ) type=InnoDB;
    
    
    create table MESSAGGIO
    (
    Id_Messaggio int not null auto_increment primary key,
    Mitt varchar(20) not null references UTENTE(User_Id),
    Dest varchar(20) not null references UTENTE(User_Id),
    Data datetime not null,
    Testo text not null
    ) type=InnoDB;
    
    
    create table ACQUISTI
    (
    Id_Oggetto int not null primary key references INSERZIONE(Id_Oggetto),
    Acquirente varchar(20) not null references UTENTE(User_Id),
    Spesa float(4,2) not null,
    Data datetime not null
    ) type=InnoDB;
    
    
    create table COMMENTO
    (
    Id_Commento int not null primary key,
    Commentatore varchar(20) not null,
    Oggetto_Commentato int not null,
    Data datetime not null,
    Commento text not null,
    foreign key (Commentatore) references UTENTE(User_Id),
    foreign key (Oggetto_Commentato) references INSERZIONE(Id_Oggetto)
    ) type=InnoDB;
    
    
    create table FEEDBACKVENDITORE
    (
    Id_Oggetto int not null references INSERZIONE(Id_Oggetto),
    Id_Venditore varchar(20) not null references UTENTE(User_Id),
    Id_Acquirente varchar(20) not null references UTENTE(User_Id),
    Feedback enum('Positivo', 'Neutro', 'Negativo') not null,
    Commento varchar(255),
    primary key (Id_Oggetto)
    ) type=InnoDB;
    
    
    create table FEEDBACKACQUIRENTE
    (
    Id_Oggetto int not null references INSERZIONE(Id_Oggetto),
    Id_Acquirente varchar(20) not null references UTENTE(User_Id),
    Id_Venditore varchar(20) not null references UTENTE(User_Id),
    Feedback enum('Positivo', 'Neutro', 'Negativo') not null,
    Commento varchar(255),
    primary key (Id_Oggetto)
    ) type=InnoDB;
    Come potete vedere la tabella AMMINISTRA contiene una foreign key che punta verso AMMINISTRATORE.
    C'è modo che se un utente viene cancellato dalla tabella AMMINISTRATORE venga anche automaticamente tolto da tutti i recordo di AMMINISTRA?

    Per favore è urgente...ormai manca poco

    Grazie
    Andrea

  2. #2
    Codice PHP:
    create table AMMINISTRA (
        
    Admin varchar(20not null,
        
    Id_Categoria int not null,
        
    Inizio_Amministrazione datetime,
        
    FOREIGN KEY (AdminREFERENCES AMMINISTRATORE(Username)
            
    ON DELETE CASCADE,
        
    foreign key (Id_Categoriareferences CATEGORIA(Id_Categoria),
        
    primary key (AdminId_Categoria)
    type=InnoDB

    PS. certo che il titolo...
    Qualunque imbecille può inventare e imporre tasse. (Maffeo Pantaleoni)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643
    ok ti ringrazio....un'altra cosa simile.
    Posso in qualche modo dirgli che non è possibile eliminare una riga di UTENTE se questo ha pubblicato un'inserzione. Cioè io nella dichiarazione della tabella INSERZIONE ho questa riga:
    Id_Venditore varchar(20) not null references UTENTE(User_Id),

    E' possibile fare in modo che non possa eliminare un record di utente se vi è un Id_Venditore in INSERZIONE uguale al suo User_Id in UTENTE?

    Grazie
    Andrea

  4. #4
    Originariamente inviato da D4rkAng3l
    E' possibile fare in modo che non possa eliminare un record di utente se vi è un Id_Venditore in INSERZIONE uguale al suo User_Id in UTENTE?
    Sì, devi usare l'opzione "NO ACTION"

    http://dev.mysql.com/doc/refman/5.0/...nstraints.html
    Qualunque imbecille può inventare e imporre tasse. (Maffeo Pantaleoni)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643
    Quel sito non me lo apre :-/

  6. #6
    Codice PHP:
    create table INSERZIONE (
        
    Id_Oggetto int not null auto_increment primary key,
        
    Id_Venditore varchar(20not null,
        
    Id_Categoria varchar(30not null references CATEGORIA(Id_Categoria),
        
    Titolo varchar(60not null,
        
    Descrizione text,
        
    Costo_Base float(4,2),
        
    Scadenza datetime,
        
    Compralo_Subito float(4,2),
        
    FOREIGN KEY (Id_VenditoreREFERENCES UTENTE(User_Id)
            
    ON DELETE NO ACTION
    type=InnoDB
    Trova comunque il modo di leggerti con attenzione il manuale, dal momento che i constraints possono dare parecchi problemi se non vengono usati con accortezza.
    Mi pare pure che ti manchino parecchie chiavi primarie.
    Qualunque imbecille può inventare e imporre tasse. (Maffeo Pantaleoni)

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643
    in che senso mi mancano le chiavi primarie? in ogni tabella ho impostato le chiavi primarie...cosa intendi?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.