Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Data normaliseren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik moet een FAQ database maken voor mijn project.Ik ben nu bezig met normaliseren maar ik ben niet 100% zeker of het klopt.
De vragen worden onderverdeeld in onderwerpen. De vragen kunnen beantwoord worden met tekst en/of afbeelding. Er wordt ook bijgehouden welke persoon een vraag/antwoord heeft gewijzigd. vetgedrukte woorden = primaire sleutels

0NV:
Afbeeldingslocatie: http://i61.tinypic.com/2s10qi8.jpg

RG= repeating group
FAQ(FAQid, vraag, antTekst, antAfbeelding, RG(Onderwerp), RG(versieNr., userID, datum))

1NV:
FAQ(FAQid, vraag, antTekst, antAfbeelding)
Onderwerpen(FAQid,onderwerp)
Versie(FAQid, versieNr. , userID, datum)

2NV: =1NV

3NV:
FAQ(FAQid, vraag , vraagID)
Vragen(vraagID, antTekst, antAfbeelding)
Onderwerpen(FAQid,onderwerp)
Versie(FAQid, versieNr. , userID, datum)

Ik twijfel zelf over 3NV. Ik weet dat de regel is dat alleen de kolommen verwijderd worden als ze niet volledig afhankelijk zijn van de primaire sleutel.

[ Voor 11% gewijzigd door Verwijderd op 09-12-2014 16:01 ]


  • HuHu
  • Registratie: Maart 2005
  • Niet online
Ik snap niet wat de tabel Vragen is. Zijn dat de vragen of de antwoorden? Indien het eerste: dan moet vraag daar heen. Indien het tweede: dan is Vragen geen goede tabelnaam.

En is een enquête een vraag? Of bestaat een enquête uit meerdere vragen? Heeft de enquête een onderwerp? Of hebben de vragen in de enquête eigen onderwerpen?

Wat geven de kolommen antTekst en antAfbeelding aan? Wordt daarin een antwoord opgeslagen? Of is het een boolean die aangeeft of de vraag met tekst of afbeelding moet worden beantwoord?

Wat betekend RG?

Waar slaat versie op? Op de enquête? Op de vragen? Op de antwoorden?

  • P_Tingen
  • Registratie: Maart 2005
  • Laatst online: 21:44

P_Tingen

omdat het KAN

Paar opmerkingen:

1) Je kunt nu niet bijhouden wanneer een vraag is gewijzigd.

2) De omschrijving van een onderwerp heb je nu als onderdeel van de sleutel. Lijkt me niet handig, dus:
  • Onderwerpen(OnderwerpID, enqueteID, Omschrijving)
3) Waar leg je de vragen in vast? In de tabel "vraag" staan alleen antwoorden zo te zien.

4) De tabel "Versie" houdt nu versies van je enquêtes bij. Je wilde toch versies van vragen en antwoorden?

5) Je gebruikt enkelvoud en meervoud door elkaar voor de tabellen. Kies 1 vorm. Persoonlijk kies ik altijd enkelvoud, maar afhankelijk van ontwikkelomgeving kan de voorkeur ook bestaan voor meervoud.

6) Elke enquête heeft maar 1 vraag? In tabel "Enquete" staat nml VraagID als attribuut

Even terug naar de basis. Ik neem even jouw eigen beschrijving:
Ik moet een enquete database maken voor mijn project. Ik ben nu bezig met normaliseren maar ik ben niet 100% zeker of het klopt. De vragen worden onderverdeeld in onderwerpen. De vragen kunnen beantwoord worden met tekst en/of afbeelding. Er wordt ook bijgehouden welke persoon een vraag/antwoord heeft gewijzigd. vetgedrukte woorden = primaire sleutels
Hier haal ik de volgende dingen uit die je bij wil houden:
  • Enquete
  • Vragen
  • Onderwerpen
  • Antwoorden
  • Persoon
Ik ga er vanuit dat een enquete meerdere vragen heeft. De vragen zijn onderverdeeld in onderwerpen, dus die zit tussen enquete en vraag in [1]. Ik neem ook aan dat iemand mee kan doen aan meerdere enquetes dus persoon wil je kunnen koppelen aan enquete [2]. Vervolgens wil je wijzigingen bijhouden op antwoorden. [3]
  1. Enquete ---< Onderwerp ---< Vraag
  2. Enquete ---< Deelnemer >--- Persoon
  3. Vraag ---< Antwoord >--- Persoon
Zou er dan zo uit kunnen zien:

Enquete(EnqueteID, EnqueteNaam, EnqueteStartDatum, EnqueteEindDatum)
Onderwerp(OnderwerpID, OnderwerpOmschrijving, EnqueteID)
Vraag(VraagID, VraagOmschrijving, OnderwerpID)
Persoon(PersoonID, PersoonNaam)
Deelnemer(EnqueteID, PersoonID)
Antwoord(VraagID, PersoonID, AntwoordDatumTijd, AntwoordTekst, AntwoordPlaatje)

... en gaat over tot de orde van de dag


Verwijderd

Topicstarter
Met enquete bedoel ik eigenlijk dat er één vragenlijst wordt gemaakt in de database. In de vragenlijst (tabel) bevinden de vragen, antwoorden, personen, datum en versienr:

0NV:

Afbeeldingslocatie: http://i58.tinypic.com/24dpv06.jpg

[ Voor 4% gewijzigd door Verwijderd op 08-12-2014 15:00 ]


  • P_Tingen
  • Registratie: Maart 2005
  • Laatst online: 21:44

P_Tingen

omdat het KAN

Verwijderd schreef op maandag 08 december 2014 @ 14:55:
Met enquete bedoel ik eigenlijk dat er één vragenlijst wordt gemaakt in de database. In de vragenlijst (tabel) bevinden de vragen, antwoorden, personen, datum en versienr:

[afbeelding]
Begrijp ik hier nu uit dat een vraag tot meerdere categorieën kan behoren? Welke tabel zie ik hier überhaupt?

... en gaat over tot de orde van de dag


Verwijderd

Topicstarter
P_Tingen schreef op maandag 08 december 2014 @ 14:58:
[...]

Begrijp ik hier nu uit dat een vraag tot meerdere categorieën kan behoren? Welke tabel zie ik hier überhaupt?
Ja klopt. De tabel is de 0NV

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Het is dus geen enquête, maar een FAQ? Een lijst met "veelgestelde vragen"?

Je moet echt wat duidelijker zijn in je probleemstelling en de vragen die je hebt. Wat is je doel?

Verwijderd

Topicstarter
HuHu schreef op maandag 08 december 2014 @ 15:03:
Het is dus geen enquête, maar een FAQ? Een lijst met "veelgestelde vragen"?

Je moet echt wat duidelijker zijn in je probleemstelling en de vragen die je hebt. Wat is je doel?
Mijn doel is om de vragen sneller te beantwoorden. Om de vragen sneller te zoeken in de database kan er naar onderwerpen gezocht worden. En uiteindelijk ga ik de antwoorden exporteren naar een excel file.

Klopt het dat de stap van 2nv naar 3nv niet hoeft aangezien antwoorden niet afhankelijk is van vragen? Want dat had ik namelijk wel gedaan.

  • P_Tingen
  • Registratie: Maart 2005
  • Laatst online: 21:44

P_Tingen

omdat het KAN

Het is dus geen enquête, maar een FAQ? Een lijst met "veelgestelde vragen"?

... en gaat over tot de orde van de dag


Verwijderd

Topicstarter
Ja het is een FAQ

1e bericht is gewijzigd

[ Voor 44% gewijzigd door Verwijderd op 08-12-2014 15:26 ]


  • P_Tingen
  • Registratie: Maart 2005
  • Laatst online: 21:44

P_Tingen

omdat het KAN

Okee, dan heeft de tabel Enquete niet zoveel nut. Gaat er dus uit. Mijn aanname voor vraag en categorie is verkeerd, want een vraag kan kennelijk tot meerdere categorieën behoren. Je wil dus niet versies van vragen, maar versies van antwoorden bijhouden.

Terug naar jouw vraag over 3NF. Wikipedia zegt hierover: "alle attributen die niet tot een sleutel behoren hangen niet af van een niet-sleutelattribuut". Dat is bijna Chinees. Wat hier bedoeld wordt is dat een attribuut niet afhankelijk mag zijn van een ander attribuut, maar alleen van de sleutel. Jouw 3NV model is dit:
3NV:
Enquete(enqueteID, vraag , vraagID)
Vragen(vraagID, antTekst, antAfbeelding)
Onderwerpen(enqueteID,onderwerp)
Versie(enqueteID, versieNr. , naam, datum)
Daar zitten geen 3NF overtredingen in volgens mij, maar je hebt dan ook niet zoveel velden. Ik heb wel moeite om hier mee te werken overigens, alleen al door verwarrende naamgeving. Je hebt een set met vragen en antwoorden hierop. Aan een vraag wil je meerdere categorieën kunnen koppelen en van een vraag wil je meerdere versies opslaan. Ik denk dat ik dat niet kwijt kan in jouw model.

Herkansing:
Vraag ( VraagID, VraagOmschrijving )
Categorie ( CategorieID, CategorieOmschrijving )
Indeling ( VraagID, CategorieID ).
Persoon ( PersoonId, PersoonNaam )
Antwoord( AntwoordID, VraagID, AntwoordTekst, AntwoordPlaatje, AntwoordVersie, AntwoordDatumTijd, PersoonID)

Even kijken of alles uit jouw screenshot past. ID-velden worden automatisch gegeneerd ga ik vanuit.
Vraag:
VraagIdOmschrijving
1Hoeveel bedragen de eenmalige kosten?
2Hoe wordt de klanttevredenheid gemeten


Categorie:
CatIdOmschrijving
1Algemeen
2Kosten
3Service


Indeling:
VraagIdCatId
11
12
23


Persoon:
IdNaam
1R.Smith
2K. Jacobus


Antwoord:
AntwoordIdVraagIdTekstPlaatjeVersieDatumPersoonID
11Er zijn geen eenmalige kostennull1.03-3-2014 1
22Geen idee hoe dat gaatnull1.05-6-2014 2
32Onderzoek wordt uitgevoerd door een aantal adviseursnull1.18-8-2014 2


Mwoa, kom je een heel eind mee denk ik.

... en gaat over tot de orde van de dag


  • borft
  • Registratie: Januari 2002
  • Laatst online: 11:31
vraagje, waarom heb je een kolom AntwoordID? die voegt geen enkele informatie toe toch?

  • P_Tingen
  • Registratie: Maart 2005
  • Laatst online: 21:44

P_Tingen

omdat het KAN

borft schreef op maandag 08 december 2014 @ 16:08:
vraagje, waarom heb je een kolom AntwoordID? die voegt geen enkele informatie toe toch?
Uniciteit van tabel " Antwoord". Dit kan ook met VraagID + Versie, maar ik vind zelf domme ID's mooier.

... en gaat over tot de orde van de dag


Verwijderd

Topicstarter
De gegevens van versiebeheer(naam, datum, versienr.) mogen toch niet in de tabel komen van Antwoord?
Bij 1NV moeten de repeating groups verwijderd worden en hiervan wordt een nieuwe gegevensgroep gemaakt:
RG:

Versiebeheer: (primary keys: FAQid en versieNr.)
FAQidversieNr.naamdatum
11.0R.Smit3-3-2014
11.1R.Smit5-5-2014
21.0J.Boer8-8-2014



Categorie: (primary keys: omschrijving en FAQid)
FAQidOmschrijving
1Algemeen
1Kosten
2Service

  • P_Tingen
  • Registratie: Maart 2005
  • Laatst online: 21:44

P_Tingen

omdat het KAN

Verwijderd schreef op maandag 08 december 2014 @ 16:36:
De gegevens van versiebeheer(naam, datum, versienr.) mogen toch niet in de tabel komen van Antwoord?
Bij 1NV moeten de repeating groups verwijderd worden en hiervan wordt een nieuwe gegevensgroep gemaakt:
Ja, dat kan, maar op deze manier ben je wel de informatie kwijt wat er dan precies is gewijzigd. Als je alleen bij wil houden dat een antwoord is gewijzigd en niet inhoudelijk geïnteresseerd bent in de oude antwoorden dan kan dit. Ik vraag me af wat dit voor informatie oplevert trouwens. In jouw voorbeeld

Versiebeheer: (primary keys: FAQid en versieNr.)
FAQid versieNr. Naam    datum
1       1.0     R.Smit  3-3-2014
1       1.1     R.Smit  5-5-2014
2       1.0     J.Boer  8-8-2014

Weet je nu alleen dat R.Smit het antwoord met ID 1 heeft veranderd. Wat hij precies heeft aangepast weet je dan weer niet. In het voorbeeld dat ik hierboven gaf zie je dat je ook de informatie terug kan halen wat het eerste antwoord was op Vraag 2. Daar was eerst ingevuld "Geen idee hoe dat gaat" maar kennelijk vond men dat achteraf geen goed antwoord want het werd op 8-8-2014 door K.Jacobus gewijzigd in "Onderzoek wordt uitgevoerd door een aantal adviseurs". Nogmaals, als je alleen weet DAT een antwoord is veranderd, maar je weet niet WAT er veranderd is, wat heb je er dan aan? Maar goed, dat is een persoonlijke keuze.

Overigens herhaal je hier steeds de namen van de personen, dus daar wil je een ID voor gebruiken. Hetzelfde geldt voor je Categorie-tabel.

... en gaat over tot de orde van de dag


Verwijderd

Topicstarter
De oude antwoorden worden niet opgeslagen. Er wordt alleen een overzicht gegeven welke personen welke antwoorden heeft gewijzigd. Je hebt gelijk dat er een userID gebruikt moet worden.

Tabel van eerste bericht is gewijzigd.

Ik weet dat voor 2NV alleen gegevensgroepen met een meervoudige sleutel moet onderzocht worden of er kenmerken afhankelijk zijn van een deel van de sleutelkenmerken.
Dus klopt het dat 1NV = 2NV? Of hangt userID en datum af van FAQid?
Pagina: 1