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

Primaire sleutel- en relatiedatabases begrijpen met MySQL (phpmyadmin)

TL;DR Je hebt geen nodig om een ​​"relatie" aan te geven, dwz een externe sleutel (FK) om op te vragen. Maar het is een goed idee . Als u dat doet, kan een FK verwijzen naar een primaire sleutel (PK) of andere UNIEKE kolom(men).

PK's en FK's worden in sommige methoden en producten ten onrechte "relaties" genoemd. Applicatierelaties worden weergegeven door tabellen . (Basistabellen en queryresultaten.) PK's &FK's zijn beperkingen:ze vertellen het DBMS dat zich alleen bepaalde situaties kunnen voordoen, zodat het kan opmerken wanneer u bepaalde fouten maakt. Het zijn geen relaties, het zijn uitspraken die waar zijn in en voor elke databasestatus en toepassingssituatie. U hoeft geen beperkingen te kennen om een ​​database bij te werken en te doorzoeken.

Weet gewoon wat elke tabel betekent . Basistabellen hebben door DBA gegeven betekenissen die u vertellen wat hun rijen betekenen. Query's hebben ook betekenissen die u vertellen wat hun rijen betekenen. Querybetekenissen worden gecombineerd uit basistabelbetekenissen parallel met hoe hun resultaatwaarden worden gecombineerd uit basistabelwaarden en voorwaarden.

  • image_tbl -- afbeelding [Id] staat in een album met de naam [albumName], heet [name], is gedateerd [dateTime] en heeft commentaar [commentaar]
  • album_tbl -- album [albumID] heet [albumName]

Je hebt niet om PK's/UNIEK's of FK's aan te geven! Maar het is een goed idee omdat het DBMS dan onmogelijke/foutieve updates kan weigeren. Een PK/UNIQUE zegt dat een subrijwaarde voor zijn kolommen slechts één keer mag voorkomen. Een FK zegt dat een subrijwaarde voor zijn kolommen moet verschijnen als een PK/UNIEKE subrijwaarde in de tabel waarnaar wordt verwezen. Het feit dat deze beperkingen gelden voor basistabellen, betekent dat bepaalde beperkingen gelden voor queryresultaten. Maar de betekenis van die queryresultaten is volgens de tabel- en voorwaardecombinaties van de query, onafhankelijk van die beperkingen. Bijvoorbeeld of albumnamen uniek zijn,

  • image_tbl JOIN album_tbl USING albumName -- afbeelding [Id] staat in een album genaamd [albumName], heet [name], is gedateerd [dateTime] en heeft commentaar [comment] EN album [albumID] heet [albumName]

Het enige probleem hier is dat als albumnamen niet uniek zijn, het kennen van de albumnaam van een afbeelding je niet zal vertellen in welk album het zich bevindt; je weet alleen dat het in een album met die naam staat. Aan de andere kant, als albumnamen uniek zijn, hebt u geen album_tbl albumID nodig.

Dus als albumnamen uniek zijn, declareer dan albumName UNIQUE in album_tbl. Identificeer vervolgens in image_tbl het album aan de hand van een PK/UNIQUE-kolom van album_tbl. Aangezien album_id vermoedelijk alleen aanwezig is om albums te identificeren, zouden we normaal gesproken verwachten dat het wordt gekozen. Verklaar vervolgens in image_tbl die kolom als een FK die verwijst naar album_tbl.

PS-indexen versnellen doorgaans het opvragen ten koste van wat tijd en ruimte. Een primaire sleuteldeclaratie in een tabeldeclaratie declareert automatisch een index. Het is een goed idee om PK, UNIQUE en FK kolommensets te indexeren.



  1. phpMyAdmin mbstring-fout

  2. WAMP:phpmyadmin is plotseling kapot gegaan

  3. Unieke beperking toevoegen in de gebruikersinterface van SQL Server 2008?

  4. Sneltoets om geselecteerde tekst automatisch in IsNull([tekst], 0) in SSMS . te laten lopen