Premiär! Fyndchans i SweClockers Månadens Drop
Permalänk

Uppbyggnad MySQL-databas

Har en fråga kring hur jag ska lösa det med en databas jag håller på med.
Tanken är att ha olika typer av optisk media, och funderar lite hur jag ska lösa det med kategorierna.

Det kommer att finnas två olika nivåer på kategorierna, men frågan är om jag ska ha med formaten under t ex spel-kategorin.
Alltså "ps4, ps5, wii" tillsammans med spel-typerna "plattformsspel, actionspel" m.m.?

Eller är det bättre att ha alla "format" i en egen tabell?

Permalänk
Hedersmedlem

Utan att exakt veta vad du vill göra (lät som du vill ha en DB över dina spel?) så låt oss anta att du vill ha en databas där du har spel som sen kan vara av ett format och en kategori.

tbl_formats
-----
format_id
name
annan info

tlb_categories
----
cat_id
cat_name
annan info

tbl_games
---
game_id
game_name
cat_id
format_id

Om du istället vill att ett spel kan finnas för flera format och också tillhöra flera kategorier så skulle jag lägga till brygg-tabeller som kopplar ihop spelet med format och kategorier. Typ

tbl_cat_bridge
---
game_id
cat_id

tbl_format_bridge
--
game_id
format_id

Sen kan du i en SQL-sats joina game till tbl_cat och tbl_format och direkt i en SQL-sats få ut all info.

Typ nått sånt kanske ..

Visa signatur

-----------------------------------------------------
Ägare/grundare: www.bjorn3d.com

Permalänk
Medlem

Ett tips är att titta på exempelvis Prisjakt och se hur kategorierna är uppbyggda där.

Om du håller isär kategorierna, så blir det senare lättare att bygga filterfunktioner. Se även till att göra det enkelt att lägga till nya kategorier.

Själv vill jag exempelvis se "action rpg" för både PS4 och Switch i vissa fall.

Sen brukar även många spel, filmer, musik m.m. kunna tillhöra flera olika kategorier. Ska varje skiva ses som "unik", eller vill du främst bygga upp en databas med information? Vad kommer syftet att vara?

Tycker att @Björn Endre beskriv uppbyggnaden bra med stor flexibilitet.

Permalänk
Medlem
Skrivet av Guldstrand:

Har en fråga kring hur jag ska lösa det med en databas jag håller på med.
Tanken är att ha olika typer av optisk media, och funderar lite hur jag ska lösa det med kategorierna.

Det kommer att finnas två olika nivåer på kategorierna, men frågan är om jag ska ha med formaten under t ex spel-kategorin.
Alltså "ps4, ps5, wii" tillsammans med spel-typerna "plattformsspel, actionspel" m.m.?

Eller är det bättre att ha alla "format" i en egen tabell?

Troligtvis är det bäst att modellera varje företeelse (plattform, speltyp, spel) i egna tabeller. Det kallas ”normalisering”. En bra databas uppnår ”tredje normalformen” - högre tal indikerar en högre grad av normalisering.

SQL är rätt dåligt på att hantera nivåer av kategorier, alltså tabeller som refererar till sig själv. Det kan därför vara bra att börja prototypa funktioner som är beroende av det för att förstå vad man kan göra effektivt och vad man inte kan göra effektivt.

Permalänk

Stort tack för snabba svar!

Tanken är att sälja olika typer av optisk media som filmer, musik, spel.
Samtliga typer/medier har ju olika format som "vhs, dvd, blu-ray", "vinyl, kassett, cd", "pc, konsol etc".

Och när egentligen en "kategori" just en kategori eller istället en typ eller ett format i detta fallet?

Permalänk
Medlem
Skrivet av KAD:

Troligtvis är det bäst att modellera varje företeelse (plattform, speltyp, spel) i egna tabeller. Det kallas ”normalisering”. En bra databas uppnår ”tredje normalformen” - högre tal indikerar en högre grad av normalisering.

SQL är rätt dåligt på att hantera nivåer av kategorier, alltså tabeller som refererar till sig själv. Det kan därför vara bra att börja prototypa funktioner som är beroende av det för att förstå vad man kan göra effektivt och vad man inte kan göra effektivt.

Plocka ut hierakier i SQL kan lösas (i de flesta DBMS) med t.ex. en rekursiv CTE (Common Table Expression).
Har inte upplevt det som särskilt långsamt trots att det funnits miljontals rader i tabellen (som dessutom var rätt bred)?