normalisatie - kritiek graag

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Pagina: 1 2 volgende »

Eduard

Eduard

06/04/2008 14:31:00
Quote Anchor link
Het is de eerste keer dat ik normalisatie moet toepassen en er zullen dus hoogstwaarschijnlijk hier en daar fouten zijn, neem ik aan, maar kritiek is meer dan welkom =)

*nickname = spelersnaam
*guid = unieke id, per computer, dus meerde nicknames kunnen dezelfde guid hebben
*cl_id wordt toegewezen bij het joinen van een server

Mijn 3NV:
-----------

PLAYERS
nicknameID [PRIMARY KEY auto_increment]
nickname [UNIQUE constraint]

GUIDS
guidID [PRIMARY KEY auto_increment]
guid [UNIQUE constraint]

COMBINATIE
id [PRIMARY KEY auto_increment]
nicknameID
guidID

INFO
id [PRIMARY KEY auto_increment]
cl_id [???]

TEAM
cl_id [???]
team
kills
deaths

Quote:
geen indexen: er worden telkens nieuwe records toegevoegd/geupdate | vandaar die Primary keys


Quote:
In de laatste tabel (team), kan cl_id helaas een NULL retourneren, niet alle records zijn dus uniek, en het wordt daarenboven telkens geupdated/toegevoegd, dus weet ik er weinig raad mee


mocht iets onduidelijk zijn, laat het maar weten
Gewijzigd op 01/01/1970 01:00:00 door Eduard
 
PHP hulp

PHP hulp

22/12/2024 08:46:55
 
Eduard

Eduard

08/04/2008 22:57:00
Quote Anchor link
zou welk gek zijn mocht ik het correct hebben, maar waarschijnlijk vindt er gewoon niemand (genoeg) tijd om hiermee bezig te zijn, mijn planen te begrijpen


(ben dus nu beetje bij beetje beginnen bekijken hoe ik mijn gegevens zou kunnen opslaan - maar wacht nog af voor mogelijke veranderingen in mijn db moht ik er iets fout hebben gedaan)
 
M Ypma

M Ypma

08/04/2008 23:12:00
Quote Anchor link
wat me ten eerste opvalt is je inconsistente naamgeving (NL/EN). Ik zal me alleen iets meer moeten verdiepen in je bedoelingen wil ik het begrijpen. Waar is dit datamodel voor bedoeld? waar moet het je van kunnen voorzien en voor wat voor applicatie is het?
Gewijzigd op 01/01/1970 01:00:00 door M Ypma
 
Eduard

Eduard

08/04/2008 23:21:00
Quote Anchor link
Ik heb een server draaien van een first shooting player spelleke.
Deze server schrijft allerlei gegevens tijdens de matchen in een .txt bestandje waaruit ik allerlei gegevens ophaal (later met cronjob)


daaruit haal ik dus de volgende gegevens:
(kzal ze in het engels opnoemen):

nickname (kan veranderd worden, maar mogen geen dubbele tegelijkertijd zijn)
client id [cl_id] (id van de speler binnen de speler op het ogenblik van de match*)
guid (uniek per person/MAC adres)
team (2 mogelijkheden, of anders offline)
kills
deaths

* ik heb 'cl_id' nodig om 'team' te kunnen bepalen, om dan te kunnen zien of er geen "teamkills" zijn om die dan van de 'kills' te kunnen aftrekken


Mijn opzet nu is dus zo goed mogelijke db te maken waarmee ik al die gegevens in een tabel kan printen, een soort van een statistieken pagina
 
M Ypma

M Ypma

08/04/2008 23:39:00
Quote Anchor link
hmmm mijn haren gaan een beetje overeind staan van deze zin:
Quote:
Deze server schrijft allerlei gegevens tijdens de matchen in een .txt bestandje waaruit ik allerlei gegevens ophaal (later met cronjob)


Waarom schrijf jeh et naar een textbestandje, je hebt toch een Database en PHP? Wat voor type applicatie maakt gebruik van deze gegevens?
 
Eduard

Eduard

08/04/2008 23:41:00
Quote Anchor link
die gameserver (wolfenstein: enemy territory)* is zo geconfigureerd, kan ik er niets aan doen =/

wat bedoel je met je laatste zin/vraag?
Gewijzigd op 01/01/1970 01:00:00 door Eduard
 
GaMer B

GaMer B

09/04/2008 06:57:00
Quote Anchor link
Eduard schreef op 08.04.2008 23:41:
wat bedoel je met je laatste zin/vraag?

Hij bedoelt waarschijnlijk: Waarom de game het exporteert naar een .txt bestand. Welk ander programma dan de game zelf maakt gebruik van dat .txt bestand?
 
Jan Koehoorn

Jan Koehoorn

09/04/2008 07:57:00
Quote Anchor link
Je naamgeving kan inderdaad beter. We kunnen nu niet uit de namen van je variabelen opmaken waar ze over gaan. Wat is bijv. guid? En waarom gebruik je een combinatietabel? Is de relatie players <-> guids van het type veel op veel?
 
Eduard

Eduard

09/04/2008 08:10:00
Quote Anchor link
Quote:
Welk ander programma dan de game zelf maakt gebruik van dat .txt bestand?

die text bestandje dient eigenlijk enkel ter controle, mocht je iets willen gaan opzoeken als er iets niet zou kloppen, dus amper 1% van de mensen gebruiken het, en mijn opzet was om er een statistiek van te maken


@Jan:

een guid is een 32 lange letter/cijfer id dat uniek is per MAC Adres, dus als je instaat ben tom je mac adres te veranderen, dan wordt je een andere guid toegewezen

die combinatie tabel heb ik eigenlijk bkomen tijdens het normaliseren, dacht dat het zo moest, maar oorspronkelijk, voordat ik het normaliseren nog begon te leren, toen had ik guid nog samen met de nickname

als ze guid, nickname samen ouden zijn, dan zou guid meermaals voorkomen, dus mischien dat ik daarom die 2 apart gezet heb, dus denk ik dat het nu is van het type veel op veel ja
Gewijzigd op 01/01/1970 01:00:00 door Eduard
 
Eduard

Eduard

11/04/2008 22:13:00
Quote Anchor link
mijn doel is dus alle guids samen met de bijbehorende nicknames weer te geven; maar aangezien een guid aan meerdere nicknames toegekend kan worden, wil ik enkel het laatst toegekende nickname echo'en

en ik kan er maar geen query bedenken die per guid/nickname zal limiten, dus denk ik dat mijn normalisatie mislukt is
 
M Ypma

M Ypma

11/04/2008 23:56:00
Quote Anchor link
maar dat is toch geen veel op veel relatie?
een guid kan aan maardere nickname's hangen... maar een nickname gan geen merdere guids hebben. Tenminste dat stel je net... dat is gewoon een 1 op veel relatie en maakt je koppeltabel overbodig.
 
Eduard

Eduard

12/04/2008 00:58:00
Quote Anchor link
ah juist, geen COMBINATIE dus, maar dan hangen guids en nicknames niet meer samen, dus moeten ze eigenlijk in 1 tabel?

PLAYERS
nicknameID [PRIMARY KEY auto_increment]
nickname [UNIQUE constraint]
guid

Als ik de volgende gegevens nu wil selecteren:

SELECT nicknameID, nickname, guid
FROM players
ORDER BY nicknameID DESC
LIMIT 1

dan zit ik mis met die limit, eigenlijk wil ik maar 1 resultaat per guid, en hier kom ik er niet aan uit =/
Gewijzigd op 01/01/1970 01:00:00 door Eduard
 
M Ypma

M Ypma

12/04/2008 02:26:00
Quote Anchor link
nee niet in 1 tabel... je zei dat meerdere nicknames hetzelfde guid kunnen hebben. dat is een 1 op veel relatie. Je houdt ze dus wel in apparte tabellen en geeft nickname een verwijzing naar een guid.

Je probleem met je limit snap ik echter niet...? je wilt maar 1 resultaat maar met je limit ga je mis?... you've lost me...
 
Eduard

Eduard

12/04/2008 07:31:00
Quote Anchor link
aha thanks, nu begrijp ik de logica =)

wel met die limit... ik wil de SELECT enkel tot unieke guids beperken, dus 't is niet dat ik 1 resultaat wil hebben, maar 1 per uniek guid, waarbij ik het laatst toegewezen nickname als spelersnaam zal selecteren (dus descending orderen en dan limit 1 ofzo)
 
Jurgen assaasas

Jurgen assaasas

12/04/2008 11:57:00
Quote Anchor link
Ik zie ook nergens Foreign keys en relaties. Dit is handig en hoef je dus niet met een klote txt file te werken.
 
Eduard

Eduard

12/04/2008 14:47:00
Quote Anchor link
Jurgen schreef op 12.04.2008 11:57:
Ik zie ook nergens Foreign keys en relaties. Dit is handig en hoef je dus niet met een klote txt file te werken.



zonder txt bestand geen grafiek/stats, dat is de enigste manier waarop dat spel zijn stats weergeeft,

PLAYERS
id [PK auto_increment]
nickname [UNIQUE constraint]
cl_id

GUIDS
nickname [FK]
guidID [PK auto_increment]
guid
datetime

TEAM
guidID [FK]
team
kills
deaths
Gewijzigd op 01/01/1970 01:00:00 door Eduard
 
M Ypma

M Ypma

12/04/2008 19:27:00
Quote Anchor link
als je altijd de laatste nickname wilt selecteren per guid, dan zul je in je tabel een kolom erbij moeten maken met het type DATETIME, zo kun je de laatste selecteren.
 
Eduard

Eduard

12/04/2008 23:01:00
Quote Anchor link
Ik heb nu deze query, maar ik kom niet uit hoe ik die beperking kan inbouwen (enkel unieke guids toegekend aan laatst toegevoegde nickname)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
SELECT  p.nickname,
    g.guid,
    t.team,
    t.kills,
    t.deaths
FROM    players AS p
INNER JOIN guids AS g
    ON p.nickname = g.nickname
 INNER JOIN team as t
     ON g.guidID = t.guidID
ORDER BY datetime DESC
Gewijzigd op 01/01/1970 01:00:00 door Eduard
 
Eduard

Eduard

14/04/2008 16:46:00
Quote Anchor link
ik heb het nu kunnen omzeilen met een extra attribut (nieuw varchar(3) DEFAULT 'ja').

Dus als we ervan uitgaan dat er 0 records in de db zijn en als ik een record toevoeg, dan is die nieuw ('ja'), maar als er nog ene record toegevoegd wordt, waarvan de guid al in de database voorkomt...dan update ik de attribut(en) van de nickname van bestaande overeenkomstige guid naar 'nee' en het nieuwe record blijft gewoon standaard 'ja', en dan laat ik enkel de records met een 'ja' zien


Dit is natuurlijk niet echt professioneel aangezien je het waarschijnlijk gewoon met een sql kunt doen (=mijn vraag in vorige post), maar ik kan het maar niet fixen =/
 
Eduard

Eduard

19/04/2008 00:54:00
Quote Anchor link
Mijn grootste twijfel zit in de db ontwerp, ik maak me zorgen dat ik 2 keer nickname erin heb, al gebruik i ker ene als Foreign Key (ben niet zeker of het kwaad kan)

PLAYERS
id [PK]
nickname [UNIQUE]
cl_id

GUIDS
guidID [PK]
nickname [FK]
guid
type

TEAM
guidID [FK]
team
kills
deaths
datetime



mijn doel:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

$sql
="SELECT type
    FROM guids
    WHERE nickname="
.$nickname."
    AND guid="
.$guid."";
$res=mysql_query($sql);

if(mysql_num_rows($res)<1){
//INSERT query...type=new
}else{
//UPDATE type naar 'old' van vorige nicknames van deze guid
//INSERT query...type=new

}

?>
Gewijzigd op 01/01/1970 01:00:00 door Eduard
 
Eduard

Eduard

22/04/2008 22:27:00
Quote Anchor link
nieuwe update:

-- players
+++ id [P.K. A.I.]
+++ nickname [U.Q.]
+++ cl_id

-- guids
+++ id [P.K. A.I.]
+++ id_nick [F.K.]
+++ guid
+++ type

-- team
+++ id_guid [F.K.]
+++ team
+++ kills
+++ deaths
+++ datetime
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.