Jag har byggt en registreringsfunktion där medlemmar sparas i en tabell och användaruppgifter i en annan.
Hur ska man tänka för att få det så smidigt och prestandasnällt som möjligt?
Ska jag se till att alla inlägg kan hämtas utan att behöva koppla till användartabellen också? D v s. jag sparar namn, ort, epost även i inläggen. Om vi tänker stora volymer av poster i databasen. Vad går snabbast. Att hämta ut 200 av 20 000 poster där man bara hämtar från en tabell eller lika många poster där man hämtar användaruppgifterna från tabell 2? Tror ni förstår hur jag menar... hehe. det blir mindre data i databasen när man slipper spara användarfält i inläggstabellen, men å andra sidan blir det två tabeller den måste leta reda på om man väljer att relatera med id tabellerna emellan...
Fråga nummer 2: När man registrerar sig så får man fylla i län och kommun. Jag har fört in alla kommuner i databasen med kommun-id och län-id.
Just nu gör jag så att när man registrerar sig så sparas kommun-id i användarposten. Det betyder att när jag sedan ska skriva ut den posten så måste jag hämta kommun-namnet från kommuntabellen som relaterar till kommun-id't.
Är det bättre att bara spara kommun-namnet direkt i ett kommun-fält i användartabellen? Dvs skippa hela kommuntabellen och spara namnet direkt i användarfältet..?
Och om jag sedan vill ha en sökfunktion, är en php-sökning så pass säker att jag hittar lika bra om jag söker på kommunnamnet (t ex "Upplands Väsby") som om jag söker på upplands väsbys kommun-id? om den letar efter ett id-nummer vet jag ju att den kommer hitta det. men som sagt, hur är det med att söka på fraser som innehåller mellanslag och åäö och sånt..?
Visserligen är kommunfältet ingenting som klienten får fylla i fritt så det komemr att vara låsta val vilket som...
Ursäkta mina dåiga förklaringar men ni förstår säkert mina funderingar. Jag tänker stort nu alltså. Om man skulle ha 10 000 besökare samtidigt eller nåt :P
Re: Använda databas till detta eller är det bara prestandakrävande?
bassebhu skrev:
Är det bättre att bara spara kommun-namnet direkt i ett kommun-fält i användartabellen? Dvs skippa hela kommuntabellen och spara namnet direkt i användarfältet..?
Att lägga in kommunen i användartabellen låter som en mycket dum idé då detta kommer att innebära rendundans så det skriker om det. Varför inte sätta kommunnamnet som primärnyckel i tabellen kommun och sedan ha det som en foreign key i användartabellen?
ok. först har jag inte en aning om vad rendundans så det skriker om det innebär..? :)
att sätta kommunnamnet som primärnyckel gör jag genom att klicka i nyckelsymbolen i phpmyadmin? :)
och detta med foreign key innebär? att jag bara tar med det som en join? eller måste göra något ytterligare..?
i så fall, är det samma med användarens namn, epost och ort m.m som man då inte borde spara i varje inlägg...? jag tycker att det borde bli slöare att hämta info från två tabeller om man har typ 20 000 poster. :)
Jag skulle lagra användarinformationen i en tabell. När användaren postar ett inlägg så sparas enbart användar-idet i inläggstabellen.
Redundans innebär att du ha data i databasen som är samma på flertalet ställen. Exempelvis att du sparar ortnamnet dels i en ortstabell och att användaren skriver in sitt eget ortsnamn blir redundans... (http://www.susning.nu/Redundans och http://www.susning.nu/Normalisera#2)
I ditt fall skulle jag nog göra så att jag sparar ortsnamnet i en egen tabell, sedan koppla id-nummret till användartababellen... (och på så sätt undvika redundans i form av att X antal medlemmar skriver in Stockholm i ort-fältet)... Fast då finns det ju ingen möjlighet för folk att skriva lite lustiga saker i ortsnamnet, typ som "Mellan stol & flygel".... ;)
Det blir slöare för dig att hämta infon från två tabeller, det är sant. Men å andra sidan sparar du en massa utrymme genom att undvika rendundansen!
men som sagt så är mina ortsnamn låsta i select-val så användare kan inte skriva in någonting själv i det fältet. ändå smartare att hämta all den infon från medlemstabellen när man skriver ut inlägg..?
min fråga är bara för att jag vill göra rätt från början och ha det så snabbladdat som det bara går.
om jag nu går på er linje med att hämta alla användaruppgifter från medlemstabellen.. hur ska jag göra för att det ska gå snabbladdat.. en join som ser ut hur? ska jag mixa nåt med primary key eller vad det var? och ska jag ange i sql-frågan vilka fält som ska hämtas så att jag inte sätter * och får en magnifik fråga som tar 20 minuter att fixa...
om jag nu går på er linje med att hämta alla användaruppgifter från medlemstabellen.. hur ska jag göra för att det ska gå snabbladdat.. en join som ser ut hur? ska jag mixa nåt med primary key eller vad det var? och ska jag ange i sql-frågan vilka fält som ska hämtas så att jag inte sätter * och får en magnifik fråga som tar 20 minuter att fixa...
SELECT
i.inlagg,
m.medlem_namn,
o.ort_namn
FROM
inlaggstabell AS i,
medlemstabell AS m,
ortstabell AS o
WHERE
i.inlagg_id = X
AND
i.medlem_id = m.medlem_id
AND
m.ort_id = o.ort_id
om jag vill spara alla inläggsdata i inläggstabellen MEN hämta bara ett fält från medlemstabellen. låt säga "namn".
tjänar jag då på att lägga till namnet i varje inlägg i stället för att hämta från två tabeller? finns det någon ungefärlig gräns vad gäller snabbladdning i förhållande till databasstorlek...?
som sagt: sparar jag kontaktuppgifter i varje inlägg så tar det mycket utrymme i databasen. hämtar jag å andra sidan kontaktuppgifter för varje inlägg från medlemstabellen så får jag två tabeller att hämta ifrån, vilket jag tycker bör vara segt. har jag fel? återigen tänker jag på hur en databas kan växa till gigantiska volymer och vill göra rätt från början...
och en fråga till: bör jag spara ip i varje inlägg eller räcker det om det sparas i medlemskolumnen när medlemmen blir registrerad?
och en fråga till: bör jag spara ip i varje inlägg eller räcker det om det sparas i medlemskolumnen när medlemmen blir registrerad?
Du bör spara i varje inlägg. Det kan ju vara någon som råkar bli av med sitt lösenord till fel person, och då kan det vara bra att se vad som har hänt.
Jag är osäker på dina övriga frågor. Du skulle ju kunna slänga upp en testdatabas med utslumpad data och helt enkelt mäta snabbheten på de olika metoderna.
har php någon liten funktion för att skriva ut laddningstiden?
hur fungerar wF's:
"Servern genererade sidan på 0.2920020 sekunder (88.21% PHP - 11.79% MySQL). Antal SQL-frågor: 37"
har php någon liten funktion för att skriva ut laddningstiden?
hur fungerar wF's:
"Servern genererade sidan på 0.2920020 sekunder (88.21% PHP - 11.79% MySQL). Antal SQL-frågor: 37"
t ex?
<?php
//överst på sidan
$tid_start = microtime();
?>
Här kommer det som ska visas på sidan!
Alltså din html kod m.m
<?php
// Längst ner på sidan
$tid_slut = microtime();
$tid = $tid_slut - $tid_start;
echo "<b>Sidan laddades på: " . round($tid, 5) . " sekunder</ b>";
?>
Angående dina frågor att hämta från en tabell vs. att hämta från två (eller flera). Det torde vara snabbare att hämta data från enbart en tabell.
MEN, om du nu tänker dig att din databas växer "till gigantiska volymer" så kommer du i sådanafall ha en massa data som är reduntant (som vi tidigare diskuterade). Det innebär alltså att din databas kommer att ta upp mycket mer utrymme om du väljer att lagra datan i en tabell.
-> MAO, om du lagrar 'ort' i varje rad i din medlemstabell så tar det upp mer utrymme än det skulle göra att lagra det i en egen tabell och sedan enbart ha ett ID som kopplar medlemmens ort till.
Kontanta: Det du eventuellt vinner i snabbhet på att ha allt i en tabell förlorar du i utrymme. Och en större databas borde vara långsammare att söka i än en som är bra normaliserad och därmed mindre...
Ang. IP-kollen så håller jag med övriga talare - lagre IP för varje inlägg!
nu är jag inne på att låta vissa uppgifter sparas i inlägget eftersom jag vill att m,an ska kunna redigera endast dem. dvs medlemsinfot används bara för att hämta till förifyllda fält. hade jag inte haft det så så hade jag nog valt att hämta allt från medlemstabellen då det rörde sig om typ 5 fält.
möjligt att jag kommer att få ångra det senare, men jag vill att man ska kunna ha olika telefonnummer och sånt i olika inlägg.
möjligt att jag kommer att få ångra det senare, men jag vill att man ska kunna ha olika telefonnummer och sånt i olika inlägg.
Ja, då måste du nog lösa det genom att placera informationen i inläggstabellen.
Men du skall vara medveten om att det kan ställa till problem för dig senare. Om en medlem flyttar/byter nummer så kommer ju då inaktuella uppgifter att finnas i inlägget...
Nyfiken: Vad är det du knåpar med? Mycket frågor från dig i PHP nu ;)
// Nippe
270 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e