sql >> Databasteknik >  >> Database Tools >> phpMyAdmin

Förstå primärnyckel- och relationsdatabaser med MySQL (phpmyadmin)

TL;DR Du behöver inte att deklarera en "relation", dvs främmande nyckel (FK) för att fråga. Men det är en bra idé . När du gör det kan en FK referera till en primärnyckel (PK) eller någon annan UNIKA kolumn(er).

PK &FK kallas felaktigt för "relationer" i vissa metoder och produkter. Applikationsrelationer representeras av tabeller . (Bastabeller och frågeresultat.) PK:er och FK:er är begränsningar:de talar om för DBMS att endast vissa situationer kan uppstå, så att den kan märka när du gör vissa fel. De är inte relationer, de är påståenden som är sanna i och för varje databastillstånd och applikationssituation. Du behöver inte känna till begränsningar för att uppdatera och fråga en databas.

Vet bara vad varje tabell betyder . Bastabeller har DBA-givna betydelser som berättar vad deras rader betyder. Frågor har också betydelser som berättar vad deras rader betyder. Frågabetydelser kombineras från bastabellbetydelser parallellt med hur deras resultatvärden kombineras från bastabellvärden och -villkor.

  • image_tbl -- bild [Id] finns i ett album som heter [albumName], heter [name], är daterad [dateTime] och har en kommentar [comment]
  • album_tbl -- albumet [albumID] heter [albumnamn]

Du har inte att deklarera några PK:er/UNIKA eller FK:er! Men det är en bra idé för då kan DBMS inte tillåta omöjliga/felaktiga uppdateringar. En PK/UNIQUE säger att ett underradsvärde för dess kolumner bara måste visas en gång. En FK säger att ett underradsvärde för dess kolumner måste visas som ett PK/UNIQUE underradvärde i dess refererade tabell. Det faktum att dessa begränsningar gäller för bastabeller betyder att vissa begränsningar gäller för frågeresultat. Men innebörden av dessa frågeresultat är enligt frågans tabell- och villkorskombinationer, oberoende av dessa begränsningar. T.ex. om albumnamn är unika eller inte,

  • image_tbl JOIN album_tbl USING albumName -- bild [Id] finns i ett album som heter [albumName], heter [name], är daterat [dateTime] och har kommentar [comment] OCH album [albumID] heter [albumName]

Det enda problemet här är att om albumnamnen inte är unika så kommer det inte att berätta för dig vilket album den är i att känna till en bilds albumnamn; du vet bara att det finns i ett album med det namnet. Å andra sidan, om albumnamn är unika, behöver du inte album_tbl albumID.

Så om albumnamn är unika, deklarera albumnamn UNIQUE i album_tbl. Identifiera sedan albumet i image_tbl med någon PK/UNIQUE-kolumn i album_tbl. Eftersom album_id förmodligen är närvarande bara för att identifiera album, förväntar vi oss normalt att det väljs. Deklarera sedan den kolumnen som en FK som refererar till album_tbl.

i image_tbl

PS-index påskyndar i allmänhet förfrågningar till priset av lite tid och utrymme. En primärnyckeldeklaration i en tabelldeklaration deklarerar automatiskt ett index. Det är en bra idé att indexera kolumnuppsättningarna PK, UNIQUE och FK.



  1. Övre gräns för uppladdningsgräns och postgräns i PHP

  2. Ta bort en del av strängen i tabellen

  3. Konvertera SSMS .rpt-utdatafil till .txt/.csv

  4. SSMS tillåter dubbletter av poster i en tabell, men inte efterföljande uppdateringar