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

    Chiave formata da attributo interno ed esterno

    Salve a tutti,
    ho un problema nell'impostare una chiave in MySql:
    ho una tabella che ha l'identificatore formato da due attributi, uno della tabella stessa ed un altro che si riferisce ad un altra tabella.
    Ora non so come impostare questa coppia come chiave primaria.
    Devo usare foreign key o primary key?
    In che modo?
    Grazie mille!

  2. #2
    Nessuno mi sa aiutare?
    Comunque, come se non bastasse ho un altro problema: questa tabella con identificatore formato da due attributi è referenziata da un'altra tabella ancora... come faccio ad esprimere questo legame se la tabella referenziata ha l'identificatore doppio???
    Grazie.
    Ciao

  3. #3
    ma perche' "devi" referenziare due colonne come chiave primaria?

    Ogni tabella deve avere la sua chiave primaria e poi tra gli attributi della tabella avra' un riferimento ad un chiave primaria di seconda o terza tabelle.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Devo referenziare due colonne, perché una non basta a identificare la tupla della tabella a cui fa riferimento la seconda tabella:
    immagina che ci sia un impiegato con dipartimento e matricola come attributi (e immagina che solo la matricola non basta ad identificarlo, quindi ho fatto attrbuto doppio anche col dipartimento) e che un lavoro deve avere un riferimento all'impiegato che l'ha svolto, ma non so come riferirlo, perché se metto solo la matricola non basta (perché potrebbero esserci due matricole uguali di diversi dipartimenti) e cmq se metto anche il dipartimento non basta lo stesso, perché non è legato a nessuna matricola specifica nella tabella del progetto.

  5. #5
    Quando si parla di chiave primaria significa che si parla di un valore che deve almeno soddisfare il seguente:

    1) identificare in modo assoluto una tupla, quindi univoco.
    2) non puo' mai essere NULL
    3) non dovrebbe avere nulla a che fare con il contenuto della tupla
    4) contenere lo stesso tipo di caratteri (INTERI o CHAR) ma preferibilmente numerico.
    5) non deve essere modificato.

    ci sono poi altri particolari per avere la chiave primaria ideale.

    Quindi quello che dici significa che stai usando uno o piu' attributi della tupla NON univoci per formare una chiave primaria e questo e' formalmente errato. Caso mai farai un indice UNIQUE dove i valori non potranno essere ripetuti, ma possono essere variati, cancellati senza dare problemi alla chiave primaria della tabella.

    Ripeto: la chiave primaria "deve" identificare uno specifico record e non identificare il contenuto del record, deve cioe' "puntare" al record e non a singoli campi del record

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Quindi dovrei modificare la chiave primaria e renderla da un solo attributo?
    Ma allora perché nelle progettazioni si fanno spesso chiavi formati da più attributi se poi non sono utilizzabili?!!

  7. #7
    Originariamente inviato da AcquaFresca
    Quindi dovrei modificare la chiave primaria e renderla da un solo attributo?
    Ma allora perché nelle progettazioni si fanno spesso chiavi formati da più attributi se poi non sono utilizzabili?!!
    non si puo' mai generalizzare con le strutture dei database. Vanno studiate le relazioni e le funzionalita' necessarie a gestirle. Ci sono pure molti database costruiti in modo assurdo e meno male che ci sono perche' mi danno anche di che vivere... come dice il pediatra: grazie al cielo ai bambini viene ancora il mal di pancia.

    Se tu hai una struttura composta da svariate tabelle, sicuramente, anche se e' un "sicuramente" genericamente inteso, la cosa migliore e' un id auto-increment e quindi un numerico intero progressivo, che identifica il record, l'unico modo che certamente rispetta pienamente i requisiti per una chiave primaria perfetta.

    Per il collegamento di un certo tab.record verso altra tab.record userai questo riferimento numerico. ma non fare mai in una tabella di unione (unione tra tabelle ottimizzate) una chiave primaria formata da informazioni provenienti da tabelle esterne.

    tra l'altro dipartimento-matricola potrebbero anche essere due tipi di campo diversi (char-int) che e' una delle cose "sconsigliate" in una chiave primaria. Poi rimane sempre il fatto che puoi fare come ti pare. Al max alla fine chiami il "pediatra".

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    A me dovrebbero chiamare lo psichiatra direttamente!!!
    Cmq a questo punto come dici tu, i campi sono ovviamente di diverso tipo ovvero un numero e una stringa.
    Ma sa che mi conviene rendere l'attributo univoco per l'identificazione...così riferisco senza ambiguità ad una sola tupla!

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