Beste
ik heb een tabel sites.
Met daarin id naam url
Nu wil ik ieder ip die de site bekeken geeft opslaan
Maak ik dan best een extra tabel aan of een extra veld waar ik alle ip's in opsla?
Het gaat om een paar duizend sites, dus hoe gaat om de snelheid
Nope, niet doen. Onthoud altijd dat je nooit meerdere gegevens in 1 veld van een record gaat opslaan. Zodra je dus gegevens gescheiden door een , gaat opslaan weet je zeker dat je verkeerd bezig bent.
Het nadeel ervan is namelijk dat je nooit meer kunt sorteren op ip-adres, of het bijvoorbeeld heel lastig wordt om met de database te kijken hoe vaak een bepaald ip-adres geweest is.
@Mark: je wilt in ieder geval een primary key in je tabel, en het makkelijkste is om daar een auto_incrment id voor te gebruiken.
Hoewel het in dit geval niet direct nodig lijkt, kun je er in een later stadium nog veel aan hebben. Vooral als je naar een bepaald record uit die tabel wilt kunnen verwijzen. Beter vooraf invoegen dan achteraf erachter komen dat je het eigenlijk toch nodig hebt.
Daarnaast zorgt het id er ook voor dat elk record uniek is, zo hoef je geen andere constraints op te nemen.
Ik heb ook zo iets, maar dat is dan met een gebruikerslijst en een IP. Als dat IP en die gebruikerslijst al in de DB staat, word de datum alleen geupdate. Anders word er een nieuwe rij in de DB gezet.
Met deze methode is je unieke waarde de 2 kolommen gebruiker en IP. Hier kun je dus bijna hetzelfde mee als met een id... en het scheelt nog ruimte ook..
Maar ik weet niet of hier ook een gebruiker o.i.d bij betrokken is.
Ja, tuurlijk kun je ook een combinatie van 2 kolommen als unieke key gebruiken. Dat is in veel gevallen zelfs verstandig.
Maar als dit je enige key is, werkt dat weer niet lekker in PHP. Een record moet je dan immers altijd met 2 twee variabelen aanduiden in tegenstelling tot enkel een id in het geval dat je een id als primary key gebruikt. Bovendien als jij telkens een record update, kun je nooit statistieken genereren van hoe vaak een bepaald ip adres je site bezocht heeft, en dat is hier waarschijnlijk wel het geval.
En over de ruimte hoef je je in dit geval echt geen zorgen te maken. Dat kan de database makkelijk aan.