klein ontwerp, graag commentaar

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Flip --

Flip --

24/10/2012 15:17:19
Quote Anchor link
ik kom graag te weten:
* of hier informatie mist
* ieder ander commentaar behalve op het data-type van de kolommen

Ik heb dit grafisch ontworpen en de SQL code laten genereren.

answers.answer kan een nederlands of frans antwoord bevatten
answers.direction moet als boolean functioneren of de vraag als frans->nederlands of nederlands->frans is gesteld

het is niet nodig om het later uit te breiden naar andere talen

Afbeelding
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
CREATE  TABLE IF NOT EXISTS `mydb`.`dictionaries` (
  `id` INT NOT NULL ,
  `name` TEXT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;

CREATE  TABLE IF NOT EXISTS `mydb`.`phrases` (
  `id` INT NOT NULL ,
  `dictionaryId` INT NULL ,
  `french` TEXT NULL ,
  `dutch` TEXT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_phrases_dictionaries_idx` (`dictionaryId` ASC) ,
  CONSTRAINT `fk_phrases_dictionaries`
    FOREIGN KEY (`dictionaryId` )
    REFERENCES `mydb`.`dictionaries` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

CREATE  TABLE IF NOT EXISTS `mydb`.`practiseSessions` (
  `id` INT NOT NULL ,
  `dictionaryId` INT NULL ,
  `started` DATETIME NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_practiseSessions_dictionaries1_idx` (`dictionaryId` ASC) ,
  CONSTRAINT `fk_practiseSessions_dictionaries1`
    FOREIGN KEY (`dictionaryId` )
    REFERENCES `mydb`.`dictionaries` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

CREATE  TABLE IF NOT EXISTS `mydb`.`answers` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `phraseId` INT NOT NULL ,
  `direction` INT NOT NULL ,
  `incorrect` INT NOT NULL ,
  `answer` TEXT NOT NULL ,
  `caseInsensitive` INT NULL ,
  `ignorePunctuation` INT NULL ,
  `practiseSessionId` INT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_answers_phrases1_idx` (`phraseId` ASC) ,
  INDEX `fk_answers_practiseSessions1_idx` (`practiseSessionId` ASC) ,
  CONSTRAINT `fk_answers_phrases1`
    FOREIGN KEY (`phraseId` )
    REFERENCES `mydb`.`phrases` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_answers_practiseSessions1`
    FOREIGN KEY (`practiseSessionId` )
    REFERENCES `mydb`.`practiseSessions` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Originele uitvoer: http://pastebin.com/VT7asMBY
Gewijzigd op 24/10/2012 15:19:48 door Flip --
 
PHP hulp

PHP hulp

18/04/2024 22:33:31
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

28/10/2012 11:25:55
Quote Anchor link
Op een paar kleine dingen na zit het (voor zover ik kan beoordelen) goed in elkaar.

Je geeft aan dat het altijd tot die twee talen beperkt zal blijven, dus waarom dat dan in een tabel zetten?

Je hebt in iedere tabel een id kolom, op zich niet fout, maar ik persoonlijk vind het onhandig want doen moet je straks in de query's alsnog gaan aliassen.

Ik neem aan dat er ook mensen zijn die de oefeningen gaan uitvoeren, dus ik mis nog een paar tabellen?

Je tabellen staan nu in de derde normaalvorm, je zou nog een trapje hoger kunnen door de incorrect kolom weg te halen (je kunt het antwoordt vergelijken met de phrases tabel)

Even een tipje - geen commentaar dus ;-) - over het datatype van de 'booleans', je kunt hier beter een tinyint(1) voor nemen, scheelt weer 10 bytes.
Gewijzigd op 28/10/2012 11:48:25 door Ger van Steenderen
 
Frank Nietbelangrijk

Frank Nietbelangrijk

28/10/2012 11:32:53
Quote Anchor link
Mag ik vragen waarmee je dit ontworpen hebt Flip?
 
Jaron T

Jaron T

28/10/2012 11:44:01
Quote Anchor link
ik neem aan dat zo'n oefensessie ook een eindtijd heeft?
edit; en bij een user hoort?
Gewijzigd op 28/10/2012 11:55:07 door Jaron T
 
Ozzie PHP

Ozzie PHP

28/10/2012 12:41:47
Quote Anchor link
Frank Nietbelangrijk op 28/10/2012 11:32:53:
Mag ik vragen waarmee je dit ontworpen hebt Flip?
Daar ben ik ook wel benieuwd naar.

@Ger: ik zie vrijwel altijd in iedere tabel een 'id' staan. Jouw argument dat je moet gaan aliassen heb ik ook eerder gehoord. Toen zei iemand dat je eigenlijk nooit 'id' als veldnaam moet gebruiken, maar altijd een prefix moet gebruiken, bijvoorbeeld customer_id. Toch zie ik in de praktijd eigenlijk altijd dat 'id' wordt gebruikt. Is dat dan niet goed?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

28/10/2012 13:03:25
Quote Anchor link
Het is niet fout, en als in een tabel geheel op zich zelf staat maakt het ook allemaal niet uit, maar dat is bijna nooit het geval. Ik zelf zorg er altijd voor dat de kolomnamen in tabellen altijd uniek zijn (behalve de FK natuurlijk), want ik weet zeker dat je het jezelf daarmee uiteindelijk makkelijker maakt. Ik heb wel de gewoonte om de prefixen in te korten, bv cst_ (tikje uit het programmeren met VB(A) en Delphi)
Maar van moeten is dus geen sprake.

PS
Hoe lang is jouw praktijd geleden? ;-)
 
Jaron T

Jaron T

28/10/2012 13:07:12
Quote Anchor link
de tool is gewoon Microsoft Visio voor de mensen die het niet weten.
 
Flip --

Flip --

28/10/2012 14:24:07
Quote Anchor link
Ik heb bewust er voor gekozen om niet uit te leggen waarvoor dit ontwerp dient, want ik hoop dat ik mijn ontwerp duidelijk genoeg kan maken dat het voor zich spreekt.

Ger van Steenderen op 28/10/2012 11:25:55:
Op een paar kleine dingen na zit het (voor zover ik kan beoordelen) goed in elkaar.

Bedankt Ger in het bijzonder voor het nakijken.

Ger van Steenderen op 28/10/2012 11:25:55:
Je geeft aan dat het altijd tot die twee talen beperkt zal blijven, dus waarom dat dan in een tabel zetten?

De applicatie is voor het oefenen van woordenlijsten. In plaats van phrase1 en phrase2, of linkerwoord en rechterwoord. Heb ik er voor gekozen om ze dutch en french te noemen. Omdat de eene taal niet percé aan een bepaalde kant hoeft te staan en ook niet de "1ste" is. De kolommen french en dutch bevat dus de belangrijkste data:
dutch: het kasteel
french: le château

Ger van Steenderen op 28/10/2012 11:25:55:
Je hebt in iedere tabel een id kolom, op zich niet fout, maar ik persoonlijk vind het onhandig want doen moet je straks in de query's alsnog gaan aliassen.

Ik begrijp je hier niet. Misschien kan je wat meer uitleggen of een voorbeeld query maken? (ook met de verdere uitleg in vervolg post zie ik niet goed in waar nu verwarring zou kunnen optreden)

Ger van Steenderen op 28/10/2012 11:25:55:
Ik neem aan dat er ook mensen zijn die de oefeningen gaan uitvoeren, dus ik mis nog een paar tabellen?

Op dit moment is het maar voor 1 gebruiker, er mist dus inderdaad nog een user tabel. Maar verder zijn er nog tabellen die zouden missen??

Ger van Steenderen op 28/10/2012 11:25:55:
Je tabellen staan nu in de derde normaalvorm, je zou nog een trapje hoger kunnen door de incorrect kolom weg te halen (je kunt het antwoordt vergelijken met de phrases tabel)

Ik wist dat ik het antwoord kan vergelijken met de originele data. Er zijn drie redenen waarom ik gekozen heb voor deze kolom.
Ten eerste wordt je query iets complexer omdat je aan de kolom direction moet aflezen of het antwoord frans of nederlands was, en dus met welke van de twee kolommen je moet vergelijken.
Ten tweede het zou misschien wat sneller zijn ook al wordt er meer geheugen gebruikt. Maar ik dit niet getest.
Ten derde, en dit is de belangrijkste reden en ook gelijk de aanleiding. Is dat incorrect meer waardes kan hebben dan 0 of 1. 0 = goed, 1 = een beetje fout, 2 = iets meer fout, 3 = nog meer fout. De functie die dit bepaald is niet zo heel simpel en dus moet dit weer iedere keer berekend worden.

Ger van Steenderen op 28/10/2012 11:25:55:
Even een tipje - geen commentaar dus ;-) - over het datatype van de 'booleans', je kunt hier beter een tinyint(1) voor nemen, scheelt weer 10 bytes.

Ja ik weet het, toch bedankt. Probleem is dat ik met doctrine werk nu (ben pas beginner hierin) en doctrine heeft niet ondersteuning voor alle datatypes van mysql out-of-the-box. Omdat dit project vooral als leerproject is bedoeld is dit geen harde eis van mij dat de datatypes zo goed mogelijk aansluiten, misschien nog eens achteraf.

Frank Nietbelangrijk op 28/10/2012 11:32:53:
Mag ik vragen waarmee je dit ontworpen hebt Flip?

MySQL Workbench: http://www.mysql.com/downloads/workbench/

Jaron T op 28/10/2012 11:44:01:
ik neem aan dat zo'n oefensessie ook een eindtijd heeft?
edit; en bij een user hoort?

Bedankt voor de tip, ik neem hem mee.

Jaron T op 28/10/2012 13:07:12:
de tool is gewoon Microsoft Visio voor de mensen die het niet weten.

Kan visio dan SQL code genereren??
Gewijzigd op 28/10/2012 14:26:23 door Flip --
 
Ozzie PHP

Ozzie PHP

28/10/2012 14:34:11
Quote Anchor link
Ger van Steenderen op 28/10/2012 13:03:25:
PS
Hoe lang is jouw praktijd geleden? ;-)
Hehe, lol... typfoutje, maar wel een mooi woord toch :D

Flip -- op 28/10/2012 14:24:07:
Frank Nietbelangrijk op 28/10/2012 11:32:53:
Mag ik vragen waarmee je dit ontworpen hebt Flip?

MySQL Workbench: http://www.mysql.com/downloads/workbench/
Thanks!

Jaron T op 28/10/2012 13:07:12:
de tool is gewoon Microsoft Visio voor de mensen die het niet weten.
Hehe, blijkbaar toch niet :)
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

28/10/2012 15:00:26
Quote Anchor link
Flip -- op 28/10/2012 14:24:07:

Ger van Steenderen op 28/10/2012 11:25:55:
Je hebt in iedere tabel een id kolom, op zich niet fout, maar ik persoonlijk vind het onhandig want doen moet je straks in de query's alsnog gaan aliassen.

Ik begrijp je hier niet. Misschien kan je wat meer uitleggen of een voorbeeld query maken? (ook met de verdere uitleg in vervolg post zie ik niet goed in waar nu verwarring zou kunnen optreden)

Door mijn manier van querieën heb ik regelmatig queries waarin ik 6+ tabellen bij elkaar join, als je dan van de helft het id nodig hebt krijg je dit
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT a.id AS aas_id, b.id AS bees_id, c.id AS cees_id FROM ....

Volgens mij heb je met het aliassen meer te typen dan als je van het begin die kolommen al zo genoemd hebt. Ik hoef kolommen alleen maar te aliassen bij een self join.

Quote:
Ger van Steenderen op 28/10/2012 11:25:55:
Ik neem aan dat er ook mensen zijn die de oefeningen gaan uitvoeren, dus ik mis nog een paar tabellen?

Op dit moment is het maar voor 1 gebruiker, er mist dus inderdaad nog een user tabel. Maar verder zijn er nog tabellen die zouden missen??

Nee
Quote:
Ger van Steenderen op 28/10/2012 11:25:55:
Je tabellen staan nu in de derde normaalvorm, je zou nog een trapje hoger kunnen door de incorrect kolom weg te halen (je kunt het antwoordt vergelijken met de phrases tabel)

Ik wist dat ik het antwoord kan vergelijken met de originele data. Er zijn drie redenen waarom ik gekozen heb voor deze kolom.
Ten eerste wordt je query iets complexer omdat je aan de kolom direction moet aflezen of het antwoord frans of nederlands was, en dus met welke van de twee kolommen je moet vergelijken.
Ten tweede het zou misschien wat sneller zijn ook al wordt er meer geheugen gebruikt. Maar ik dit niet getest.
Ten derde, en dit is de belangrijkste reden en ook gelijk de aanleiding. Is dat incorrect meer waardes kan hebben dan 0 of 1. 0 = goed, 1 = een beetje fout, 2 = iets meer fout, 3 = nog meer fout. De functie die dit bepaald is niet zo heel simpel en dus moet dit weer iedere keer berekend worden.

De derde normaalvorm is in deze toepassing voldoende, dingen niet moeilijker maken dan nodig is.

Mooie tool, ik gebruik hem ook(samen met dbtools manager)
Gewijzigd op 28/10/2012 16:05:37 door Ger van Steenderen
 
Flip --

Flip --

28/10/2012 18:52:45
Quote Anchor link
Gelezen & begrepen, bedankt voor je input :)
 
Ozzie PHP

Ozzie PHP

28/10/2012 19:48:27
Quote Anchor link
Gebruik je MySQL Workbench eigenlijk in plaats van PHPMyAdmin? Of zijn dit 2 totaal verschillende tools?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

28/10/2012 20:21:30
Quote Anchor link
@Flip yw ;-)
@Ozzie
MySQL Workbench is software en PhpMyAdmin is een webapp.
Als je met een hostprovider werkt heb je de kans dat je geen remote access tot je je database hebt, in dat geval ben je gebonden aan PMA, zodra je vanaf je client bij de database kunt, adviseer ik om een client tool te gebruiken.
Ik zelf gebruik Workbench en Dbtools door en naast elkaar, omdat ze allebei voor- en nadelen hebben.
Gewijzigd op 28/10/2012 20:22:11 door Ger van Steenderen
 
Ozzie PHP

Ozzie PHP

28/10/2012 20:25:06
Quote Anchor link
Thanks Ger. Maar hoe moet ik me zoiets voorstellen? Zet je MySQL Workbench op de server? Of zet je het op je eigen computer en connect je dan met de server?

En kun je met MySQL Workbench hetzelfde als met PHPMyAdmin?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

28/10/2012 20:43:13
Quote Anchor link
Je kan het gewoon op je eigen computer installeren (als je het op een server kan installeren, zal je wss ook voldoende rechten hebben om om GRANTS uit te delen in mysql)

Met workbench kan je ERD's maken dat kan met PMA niet, voor de rest heb je dezelfde mogelijkheden. Alleen werken pc applicaties over het algemeen sneller en gemakkelijker.
 
Ozzie PHP

Ozzie PHP

28/10/2012 23:31:34
Quote Anchor link
Ah oké, thanks!
 
John D

John D

28/10/2012 23:42:53
Quote Anchor link
Ik ben ook fan van MySQL Workbench, ik werk echt nooit met PhpMyAdmin. Ik vind PhpMyAdmin de meest gebruikers-onvriendelijke tool ooit. Puur broddelwerk. Ik snap niet dat mensen daar tabellen mee aanmaken en hele tabellen zitten te vullen. Ik gebruik naast MySQL Workbench ook msysql command line (op de laptop) om databewerkingen/aanpassen/laden op de remote database uit te voeren. Zoals Ger zegt, wat grants en je kan mooi een client/server verbinding opbouwen.
 
Ozzie PHP

Ozzie PHP

28/10/2012 23:49:44
Quote Anchor link
Ik zal me er eens in verdiepen. Heb altijd met PHPMyAdmin gewerkt, omdat ik eigenlijk niet beter weet :-s
En bij shared hosts is dat ook de enige manier waarop het kan volgens mij. Mocht ik tzt besluiten om voor mezelf te beginnen en eventueel een eigen vps server te nemen, dan is de mogelijkheid om MySQL Workbench te gebruiken er waarschijnlijk wel. Alleen geen idee hoe ik dan moet connecten. Is dat gewoon een kwestie van de host en de gebruikersnaam en wachtwoord invoeren?

Toevoeging op 28/10/2012 23:51:02:

Is zo'n tekening in de openingspost trouwens alleen bedoeld om de tabellen te maken, of kun je naderhand (als de tabellen al zijn gemaakt) ook wijzigingen in die tekening maken, die dan worden doorgevoerd in de tabellen?
 
John D

John D

29/10/2012 08:19:27
Quote Anchor link
Ozzie PHP op 28/10/2012 23:49:44:
Alleen geen idee hoe ik dan moet connecten. Is dat gewoon een kwestie van de host en de gebruikersnaam en wachtwoord invoeren?Toevoeging op 28/10/2012 23:51:02:
Inderdaad host en de gebruikersnaam en wachtwoord opvoeren. MySQL Workbench zal je dat vanzelf vragen. Op de remote database moet je jezelf autoriseren met bijvoorbeeld: GRANT ALL PRIVILEGES ON databasenaam.* TO 'ozzie'@'99.99.999.9' IDENTIFIED BY 'wachtwoord'; waarbij 99.99.999.9 jouw ipnummer is. Het ipnummer van je internet-adsl/cable wel te verstaan.
Gewijzigd op 29/10/2012 08:20:04 door John D
 
Flip --

Flip --

29/10/2012 11:19:33
Quote Anchor link
Ozzie PHP op 28/10/2012 23:49:44:
Is zo'n tekening in de openingspost trouwens alleen bedoeld om de tabellen te maken, of kun je naderhand (als de tabellen al zijn gemaakt) ook wijzigingen in die tekening maken, die dan worden doorgevoerd in de tabellen?


Je kan ook tabellen wijzigen, en schuiven en anders linken. Download maar eens & probeer !
 
Ozzie PHP

Ozzie PHP

29/10/2012 12:19:53
Quote Anchor link
Oké. Wellicht kom ik hier in de toekomst nog een keer op terug. Thanks!
 

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.