sql >> Databáze >  >> RDS >> Mysql

Zkoumání datového modelování (jak sbalit rozumnou databázi)

Překvapení, že většina odpovědí zřejmě přehlédla otázku, ale zkusím to;

Tomu se říká datové modelování (jak sbalíte hromadu tabulek v databázi, abyste co nejlépe vyjádřili, co chcete), a nemějte pocit hlouposti, když se ptáte; existují lidé, kteří tráví všechny své bdělé hodiny laděním a navrhováním datových modelů. Jsou nesmírně důležité pro blaho jakéhokoli systému a ve skutečnosti jsou mnohem důležitější, že jim většina lidí připisuje uznání.

Zní to, že jste na správné cestě. Vždy je dobrý tip definovat své entity a vytvořit tabulku pro každou z nich, takže v tomto případě máte například uživatele a seznamy skladeb a skladby. Definujte své tabulky takto; USER, SONG, PLAYLIST.

Další věcí je definování názvů polí a tabulek (a možná zjednodušené názvy navržené výše jsou zjednodušené). Někteří zavádějí faux jmenné prostory (tj. MYAPP_USER namísto pouhého USER), zvláště pokud vědí, že datový model se bude v budoucnu rozšiřovat a rozšiřovat ve stejné databázi (nebo, někteří proto, že vědí, že je to nevyhnutelné), zatímco jiní budou jen prorážet cokoli potřebují.

Velkou otázkou vždy bude normalizace a různé problémy kolem toho, vyvažování výkonu a použitelnosti a na toto téma jsou napsané tuny a tuny knih, takže vám nemohu dát žádnou smysluplnou odpověď, ale podstata toho pro mě je;

V jakém okamžiku bude datové pole v tabulce hodné vlastní tabulky? Příkladem je, že můžete svou aplikaci vytvořit pouze s jednou tabulkou, dvěma nebo 6 v závislosti na tom, jak chcete rozdělit data. Tady si myslím, že vaše otázka skutečně přichází.

Řekl bych, že máte ve svých předpokladech do značné míry pravdu, věc, kterou je třeba mít na paměti, je konzistentní konvence pojmenování (a existuje spousta názorů na to, jak pojmenovat identifikátory). Pro vaši aplikaci (s výše uvedenými tabulkami) bych udělal;

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

Nyní můžete použít SQL a získáte všechny seznamy skladeb pro uživatele;

   SELECT * FROM PLAYLIST WHERE userid=$userid

Nebo získat všechny skladby v seznamu skladeb;

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

A tak dále. Opět byly na toto téma napsány svazky. Je to všechno o jasném a sémantickém myšlení a zapisování technického řešení. A někteří lidé to mají jen jako kariéru (jako DBA). Bude spousta názorů, zejména na to, co jsem zde napsal. Hodně štěstí.



  1. Jak exportovat tabulku do CSV pomocí Oracle SQL Developer?

  2. Jak pokračovat ve zpracování smyčky kurzoru po výjimce v Oracle

  3. Jak získáte UTC pole datetime?

  4. Jak vyřešit ORA-02014:nelze vybrat FOR UPDATE ze zobrazení pomocí DISTINCT, GROUP BY