sql >> Database teknologi >  >> RDS >> Mysql

Udforskning af datamodellering (hvordan man hobler en fornuftig database sammen)

Overrasket synes de fleste svar at have overset spørgsmålet, men jeg vil prøve det her;

Dette kaldes datamodellering (hvordan du hobler en masse tabeller i en database sammen for at udtrykke, hvad du ønsker på den bedst mulige måde), og ikke føler dig dum for at spørge; der er mennesker derude, som bruger alle deres vågne timer på at finjustere og designe datamodeller. De er enormt vigtige for ethvert systems velbefindende, og de er i sandhed langt vigtigere, som de fleste giver dem æren for.

Det lyder som om du er på rette vej. Det er altid et godt tip at definere dine entiteter og oprette en tabel pr. hver, så i dette tilfælde har du f.eks. brugere og afspilningslister og sange. Definer dine tabeller således; BRUGER, SANG, PLAYLIST.

Den næste ting er at definere navnene på felter og tabeller (og måske er de forenklede navne foreslået ovenfor, ja, forsimplede). Nogle introducerer falske navnerum (dvs. MYAPP_USER i stedet for kun USER), især hvis de ved, at datamodellen vil udvide og udvide sig i den samme database i fremtiden (eller, nogle fordi de ved, at dette er uundgåeligt), mens andre bare vil ramme igennem hvad end de har brug for.

Det store spørgsmål vil altid handle om normalisering og forskellige problemer omkring det, balancering mellem ydeevne og anvendelighed, og der er tonsvis af bøger skrevet om dette emne, så jeg kan ikke give dig noget meningsfuldt svar, men kernen i det for mig er;

På hvilket tidspunkt vil et datafelt i en tabel være værdig til sin egen tabel? Et eksempel er, at du godt kunne oprette din applikation med kun én tabel, eller to eller 6 afhængigt af, hvordan du ønsker at opdele dine data. Det er her, jeg tror, ​​dit spørgsmål virkelig kommer ind.

Jeg vil sige, at du stort set har ret i dine antagelser, det du skal huske på er konsekvente navnekonventioner (og der er tonsvis af meninger om, hvordan man navngiver identifikatorer). Til din ansøgning (med tabellerne nævnt ovenfor), vil jeg gøre;

USER { id, username, password, name, coffee_preference } 
SONG { id, artist, album, title, genre } 
PLAYLIST { id, userid } 
PLAYLIST_ITEM { id, songid, playlistid, songorder }

Nu kan du bruge SQL du får alle afspilningslister til en bruger;

   SELECT * FROM PLAYLIST WHERE userid=$userid

Eller få alle sange på en afspilningsliste;

   SELECT * FROM SONG,PLAYLIST_ITEM WHERE playlist_item.playlistid=$playlist.id AND song.id=playlist_item.songid ORDER BY playlist_item.songorder

Og så videre. Igen er der skrevet tomes om dette emne. Det handler om at tænke klart og semantisk, mens du noterer en teknisk løsning på det. Og nogle mennesker har kun dette som en karriere (som DBA'er). Der vil være mange meninger, især om det, jeg har skrevet her. Held og lykke.



  1. MySql kan ikke opdatere overordnet række, når jeg har ON UPDATE CASCADE

  2. MySQL-forespørgsel er ikke indsat, når PHP-variabelen indeholder enkelte anførselstegn

  3. Hvilken SQL-forespørgsel er bedre, MATCH MOD eller LIKE?

  4. Java-undtagelsesfejl - Sqlite readyStatement.setBlob