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

Návrh databáze pro kategorii, podkategorii a související knihy

Není důvod mít více než jednu tabulku pro „kategorie“, ať už jde o kategorii nejvyšší úrovně nebo podkategorii. Všechno jsou to jen "kategorie".

Mějte tedy jednu tabulku nazvanou "kategorie" s parent_id pole:

// categories table
id
name
user_id
parent_id

Pokud chcete získat všechny kategorie nejvyšší úrovně, stačí spustit dotaz proti categories tabulka s podmínkou parent_id je null.

Když pak budete chtít vytáhnout podkategorie, stačí spustit dotaz proti categories tabulka s podmínkou, že parent_id = 123 (nebo cokoli jiného).

Nejen, že díky tomu bude vše mnohem čistší, ale také to umožňuje rozšíření v případě, že chcete pokračovat v přidávání pod-pod-pod-podkategorií...atd.

Další možností je použít CakePHP's TreeBehavior .

Osobně raději používám způsob, který jsem navrhl výše, ale může to být tím, že jsem si nenašel čas, abych tomuto chování dostatečně porozuměl.



  1. Funkce NEW_TIME() v Oracle

  2. Vnořené příkazy CASE v MySQL

  3. PostgreSQL:výchozí názvy omezení

  4. Upozornění:mysqli_query() očekává, že parametr 1 bude mysqli, daný zdroj