sql >> Database teknologi >  >> Database Tools >> phpMyAdmin

Forståelse af primærnøgle- og relationsdatabaser med MySQL (phpmyadmin)

TL;DR Du behøver ikke behøve at erklære et "forhold", dvs. fremmednøgle (FK) til forespørgsel. Men det er en god idé . Når du gør det, kan en FK referere til en primær nøgle (PK) eller enhver anden UNIK kolonne(r).

PK'er og FK'er kaldes fejlagtigt "relationer" i nogle metoder og produkter. Applikationsrelationer er repræsenteret af tabeller . (Basistabeller og forespørgselsresultater.) PK'er og FK'er er begrænsninger:de fortæller DBMS, at kun bestemte situationer kan opstå, så den kan mærke, når du laver bestemte fejl. De er ikke relationer, de er udsagn sande i og for enhver databasetilstand og applikationssituation. Du behøver ikke kende begrænsninger for at opdatere og forespørge på en database.

Du skal bare vide, hvad hver tabel betyder . Basistabeller har DBA-givne betydninger, der fortæller dig, hvad deres rækker betyder. Forespørgsler har også betydninger, der fortæller dig, hvad deres rækker betyder. Forespørgselsbetydninger kombineres fra basistabelbetydninger parallelt med, hvordan deres resultatværdier kombineres fra basistabelværdier og -betingelser.

  • image_tbl -- billede [Id] er i et album ved navn [albumName], hedder [name], er dateret [dateTime] og har en kommentar [comment]
  • album_tbl -- album [albumID] hedder [albumnavn]

Du har ikke at erklære PK'er/UNIQUE'er eller FK'er! Men det er en god idé fordi så kan DBMS'en forbyde umulige/fejlagtige opdateringer. En PK/UNIQUE siger, at en underrækkeværdi for dens kolonner kun må vises én gang. En FK siger, at en underrækkeværdi for dens kolonner skal vises som en PK/UNIQUE underrækkeværdi i dens refererede tabel. Det faktum, at disse begrænsninger gælder for basistabeller, betyder, at visse begrænsninger gælder for forespørgselsresultater. Men betydningen af ​​disse forespørgselsresultater er i henhold til forespørgslens tabel- og betingelseskombinationer, uafhængigt af disse begrænsninger. F.eks. om albumnavne er unikke eller ej,

  • image_tbl JOIN album_tbl USING albumName -- billede [Id] er i et album ved navn [albumName], hedder [navn], er dateret [dateTime] og har kommentar [comment] OG album [albumID] hedder [albumName]

Det eneste problem her er, at hvis albumnavne ikke er unikke, så vil det ikke fortælle dig, hvilket album det er i, at kende et billedes albumnavn; du ved kun, at det er i et album med det navn. På den anden side, hvis albumnavne er unikke, behøver du ikke album_tbl albumID.

Så hvis albumnavne er unikke, erklær albumnavn UNIQUE i album_tbl. Identificer derefter albummet i image_tbl ved hjælp af en PK/UNIQUE-kolonne i album_tbl. Da album_id formodentlig kun er til stede med det formål at identificere album, ville vi normalt forvente, at det blev valgt. Så erklærer du den kolonne i image_tbl som en FK, der henviser til album_tbl.

PS-indekser fremskynder generelt forespørgsler på bekostning af noget tid og plads. En primær nøgleerklæring i en tabelerklæring erklærer automatisk et indeks. Det er en god idé at indeksere PK, UNIQUE og FK kolonnesæt.



  1. Hvordan sletter jeg tomme rækker i Mysql?

  2. Errno 121, dubleret nøgle ved skrivning eller opdatering?

  3. Hvordan aktiverer jeg phpMyAdmins Designer-visning?

  4. Sådan indstilles standardlagringsmotoren til InnoDB i XAMPP