Gå med beroende

I databasteorin är ett sammanfogningsberoende en begränsning av uppsättningen av juridiska relationer över ett databasschema. En tabell är föremål för ett sammanfogningsberoende om T alltid kan återskapas genom att sammanfoga flera tabeller som var och en har en delmängd av attributen för . Om en av tabellerna i kopplingen har alla attribut för tabellen kallas kopplingsberoendet trivialt.

Anslutningsberoendet spelar en viktig roll i den femte normalformen , även känd som projekt-join-normalform , eftersom det kan bevisas att om ett schema bryts upp i tabeller till , kommer nedbrytningen att vara en förlustfri sammanfogning om de juridiska relationerna på är begränsade till ett sammanfogningsberoende på som kallas .

Ett annat sätt att beskriva ett anslutningsberoende är att säga att relationerna i anslutningsberoendet är oberoende av varandra.

Till skillnad från i fallet med funktionella beroenden , finns det ingen sund och fullständig axiomatisering för sammanfogningsberoenden, även om axiomatisering existerar för mer uttrycksfulla beroendespråk, såsom fullskrivna beroenden. Men implikationen av sammanfogningsberoenden kan avgöras.

Formell definition

Låt vara ett relationsschema och låt vara en nedbrytning av .

Relationen uppfyller kopplingsberoendet

om

Ett sammanfogningsberoende är trivialt om en av är själv.

2-ary join-beroenden kallas multivalued dependency som en historisk artefakt av det faktum att de studerades före det allmänna fallet. Mer specifikt om U är en uppsättning attribut och R en relation över den, så uppfyller R om och endast om R uppfyller

Exempel

Givet en pizzakedja som modellerar inköp i tabell Order = {order-nummer, kund-namn, pizza-namn, courier}. Följande relationer kan härledas:

  • kundnamn beror på ordernummer
  • pizza-namn beror på ordernummer
  • bud beror på ordernummer

Eftersom relationerna är oberoende finns det ett sammanfogningsberoende enligt följande: *((ordernummer, kundnamn), (ordernummer, pizzanamn), (ordernummer, bud)).

Om varje kund har sin egen kurir kan det dock finnas ett anslutningsberoende så här: *((order-nummer, kund-namn), (order-nummer, pizza-namn), (order-nummer, kurir), ( kundnamn, kurir)), men *((beställningsnummer, kundnamn, kurir), (beställningsnummer, pizzanamn)) skulle också vara giltigt. Detta gör det uppenbart att det inte räcker att bara ha ett anslutningsberoende för att normalisera ett databasschema.

Se även