Ik zal het eens doorlopen en kijken wat me opvalt:
- Waarom hebben alle properties de entity as prefix? Niet geweldig nuttig en veel typwerk.
- Ik zie geen relaties? Hierdoor is het lastig om te zien of de algemene structuur op orde is,
met de juiste kardinaliteiten en wat garnering zoals cascades enzo kan je het jezelf een stuk duidelijker/makkelijker maken.
- De user in de entiteit video is niet als foreign key gedefinieerd.
- Het bijhouden van totalen in de losse tabellen vind ik op zn zachtst gezegd raar. Deze waarden kan je eenvoudig on the fly berekenen, eventueel makkelijk met views. Mocht je echt performance issues hebben kan je ze altijd in een aparte tabel mikken met wat stored procedures om ze te updaten.
- Al je datums sla je op als ints, ik neem aan dat je hier timestamps in wilt stoppen. Op zich een prima oplossing maar een date veld is wat makkelijker uit te lezen icm andere programmeertalen wellicht.
- Er valt nog aardig wat te normaliseren, hoewel je hier natuurlijk zelf de keuze's in maakt. Voorbeeld: Als 99% van je gebruikers uit NL komt en dat allemaal zelf typen...
- Waarom is user_level in godsnaam een varchar? Wil je hier iets engs inzetten als 'admin' en 'modje' ofzo? Kies voor een uitgewerkte structuur met policies of 'gewone' authlevels, waarin je werkt met ints van 0 tot x.
- Heroverweeg bepaalde datatypen zoals een varchar voor rating (??!) en een varchar voor e-mail. In principe kan een e-mail adres namelijk langer dan 255 chars zijn.
- In video is je (overigens niet gedefinieerde) foreign key de username, dit zou een userid moeten zijn neem ik aan?
- De tabel video_search snap ik niet helemaal, je wilt hierin alle unieke keywords uit searches in opslaan, waarom? Je kunt zo bijvoorbeeld niet achterhalen hoe vaak er op iets gezocht is.
- Enkele tabellen hebben geen primairy key?
- Wees iets conservatiever met je indexen, het nut van een INDEX_COMMENTS bijvoorbeeld is mij niet direct duidelijk.
Succes met reviseren, reviseren en nog eens reviseren!