sql >> Database >  >> RDS >> Mysql

MYSQL complexe Unie

Als uw gewenste hiërarchie programma -> thema -> streng -> jaar -> eenheid -> leermoment is, dan moet u uw tabelstructuur aanpassen om dit weer te geven. In het bijzonder moet een thema een buitenlandse sleutelrelatie hebben tussen thema en programma, en heb je een extra niveau nodig voor het jaar. Het hebben van een externe sleutel tussen thema en programma vermijdt de noodzaak van een cross join. Cross-joins hebben de gewoonte om je te bijten en moeten over het algemeen worden vermeden.

Als je naar deze db fiddle kijkt u zult zien dat ik deze wijzigingen heb aangebracht. Ik heb het jaarniveau strandjaar genoemd om het gebruik van een gereserveerd woord te vermijden, maar de bedoeling mag duidelijk zijn. Nu worden de joins inner joins (in plaats van left joins) om de beschrijvingswaarden van hogere niveaus in de boomstructuur op te halen, en het onderste niveau (learning_events) bevat automatisch alleen waarden die overeenkomen met streng, jaar en eenheid, om geen andere reden dan dat de structuur zelf het garandeert, door het simpele hulpmiddel dat elk niveau een externe sleutel heeft naar het niveau erboven.

Merk op dat de externe sleutels effectief een kettingschakel zijn. Je hebt bijvoorbeeld geen specifieke externe sleutel nodig tussen learning_event en streng, omdat de tussenliggende sleutels in de keten de relatie garanderen.



  1. Doe met ons mee voor een introductie tot toegang met SQL Server

  2. Laravel 5.4 Upgrade -- Integriteitsbeperkingsschending - Kolom kan niet null zijn

  3. Onze server kan niet meer dan 20 verzoeken/seconde aan

  4. Hoe wamp-server te repareren zonder opnieuw te installeren?