Geïmporteerde gegevens rangschikken

Status
Niet open voor verdere reacties.

JJZijlstra

Gebruiker
Lid geworden
26 nov 2013
Berichten
283
Beste lezer(s),

Graag het volgende.

Het bijgevoegde bestand is een bestaande database die ik geïmporteerd heb vanuit Excel waar heel veel verschillende radiostations voorkomen.
Het geval is dat meerdere velden, o.a.. Freq, Radiostation en Doelgebied en nog meer velden in deze tabel in veelvoud voorkomen.
Bijv. bij een telling constateerde ik dat er al meer dan 900 verschillende radiostations zijn!!

Voor zover ik Access begrijp hoef je maar één keer een bepaald veld in te vullen door normaliseren maar dat zou hier gigantisch veel tabellen opleveren waardoor het geheel onoverzichtelijk wordt.
Mijn vraag is dan ook hoe ik deze tabel op correcte wijze kan normaliseren in liefst betrekkelijk korte tijd.

Heel kort samenvattend: Hoe ga ik met deze tabel om in access.

Voorbeeldbestand is bijgevoegd.

Vriendelijke groet,
Toby
 

Bijlagen

  • Database11.zip
    395,9 KB · Weergaven: 19
Laatst bewerkt:
Zonder kennis van de materie is dit lastig. Ik zie inderdaad 999 unieke Radiostations (inclusief "Unknown Station") en 1455 unieke combinaties van Radiostation en Doelgebied. Voor de rest kan ik er bij gebrek aan kennis/informatie nog geen chocola van maken.
 
Laatst bewerkt:
Ik zou alleen de radiostations in een stamtabel zetten, zie bijlage.
De database gaat dan van 2240 kB naar 1960 kB.
 

Bijlagen

  • Database11-norm.zip
    358,5 KB · Weergaven: 20
@AHulpje,

Hoe heb je dit voorelkaar gekregen?
Je moet de stationsnummers wel bij de juiste gegevens in de hoofdtabel plaatsen?
Hoe is je werkwijze ?

Grt. Toby
 
CREATE TABLE Radiostations
(Id AUTOINCREMENT PRIMARY KEY,
Radiostation CHAR);


INSERT INTO Radiostations
SELECT DISTINCT Radiostation FROM [sked-a22];


ALTER TABLE [sked-a22]
ADD COLUMN IdRadiostation NUMERIC;


UPDATE [sked-a22] INNER JOIN Radiostations ON [sked-a22].Radiostation = Radiostations.Radiostation
SET IdRadiostation = Radiostations.Id;


ALTER TABLE [sked-a22] DROP COLUMN Radiostation;
 
Ik vraag me eerlijk gezegd af of je veel opschiet met de oplossingen van AHulpje.

Als je alleen de namen van de stations in een tabel zet, dan is de rest van de data nog steeds niet genormaliseerd. Het beetje ruimtewinst lijkt me niet belangrijk.
Ten aanzien van de "stationnummers" vraag ik me af wat je daar mee bedoelt (welke kolom?). Ik zou verwachten dat dat iets unieks is voor een station, maar in de kolom Id staan per stationsnaam meerdere waardes.

Ik had zelf ook al een beginnetje gemaakt, door bijvoorbeeld per station vast te leggen bij welke doelgebieden ze horen. Zie schema. De tabellen heb ik ook gevuld op basis van de aangeleverde tabel.

Mijn vraag blijft hoe de rest van de data te structureren. Ik zie bijvoorbeeld frequenties. Maar waar horen die bij? Bij een station, bij een station/uitzendgebied, bij ............? Idem ten aanzien van UTC (uitzendtijden???).
Verder zie ik een kolom ITU (lijken landen), maar er zijn stations met meerdere landen, dus.....
Voor het beantwoorden van al dit soort vragen is kennis van de materie nodig en die zal jij aan moeten leveren. Zonder antwoorden geen goede structuur.
 

Bijlagen

  • Radiostations.jpg
    Radiostations.jpg
    18,4 KB · Weergaven: 26
@xps351,

Hier een beetje uitleg.
Frequenties (= Freq) behoren bij een radiostation die op een aangegeven tijd (= UTC) uitzendt naar een gebied (= doelgebied), dat doelgebied kan overal op de wereld zijn. De thuisbasis van het radiostation oftewel het land waar het radiostation is gevestigd wordt hier aangeduid met het veld ITU.

Je begrijpt misschien wel dat je op heel velden sorteringen kunt doen en dat het zeer moeilijk is om vanuit een bestaande database te normaliseren, dat geldt althans voor mij.
Ik hoop dat je nu iets meer duidelijkheid hebt gekregen.

@AHulpje,
SQL is voor mij nieuw. Waar kan ik dat vinden in Access? Ooit heb ik gelezen dat daarvoor mogelijkheden zijn. Werkt sql makkelijker dan via access?

Groet,
Toby
 
Voor mij werkt SQL vaak makkelijker dan via de wizards, maar dat is heel persoonlijk.
Je kunt de eerder genoemde query's op de volgende manier uitvoeren:

Open de database

Kies achtereenvolgens:
- Maken
- Queryontwerp
- Sluiten
- SQL Weergave

En kopieer achtereenvolgens een voor een de query's in het queryvenster en klik op Uitvoeren.
 
Hier een beetje uitleg.
Frequenties (= Freq) behoren bij een radiostation die op een aangegeven tijd (= UTC) uitzendt naar een gebied (= doelgebied), dat doelgebied kan overal op de wereld zijn. De thuisbasis van het radiostation oftewel het land waar het radiostation is gevestigd wordt hier aangeduid met het veld ITU.

Oké, dat maakt een aantal zaken duidelijk(er). Ik heb het model wat omgebouwd.

Een punt is nog wel het land. Ik heb een aantal stations(namen) gevonden waarbij meerdere landen genoemd worden. Zie bijgevoegd lijstje.
Dat kan betekenen dat er in verschillende landen stations met dezelfde naam bestaan (dan moet het vullen van de tabel stations anders). Het kan ook dat ze echt meerdere vestigingslanden hebben; dan moet het model uitgebreid worden.

Omdat een voorbeeld meer zegt dan 1000 woorden, heb ik mijn voorbeelddatabase bijgevoegd.
De (nieuwe) tabellen zijn leeg. Als je de drie aanwezige query's na elkaar opent/uitvoert worden de tabellen gevuld.
Ik heb het zo gemaakt dat rerecords met station "Unknown Station" worden genegeerd.
Het is uiteraard nog niet af, maar het is een beginnetje.

Zoals Ahulpje zei: geen zorgen over SQL. De query's heb ik bij elkaar geklikt in de ontwerpweergave. De SQL wordt op de achtergrond automatisch gemaakt. De tabellen heb ik met het handje gemaakt.
 

Bijlagen

  • ITU.jpg
    ITU.jpg
    21,3 KB · Weergaven: 21
  • Radiostations02.zip
    356,4 KB · Weergaven: 17
Laatst bewerkt:
Nog een kleine aanvulling.

Ik heb het veld UTC gesplitst in twee (tijd)velden: Van en Tot. Dat is zuiverder en zo kan je makkelijker afdwingen dat er bestaande tijden ingevoerd worden.
Punt is wel dat 24:00 geen geldige tijd is. Overal waar die voorkomt heb ik er 00:00 van gemaakt (nou ja, laten maken).
 
@Peter,

Het lijkt me ook wel verstandig om de UTC (tijd) in 2 velden te splitsen en de tijd 24:00 te vervangen door 00:00.

Heb jouw database bekeken maar weet niet hoe ik er mee om moet gaan,
Een gebruiksaanwijzing zou goed zijn. Ik weet nog lang niet alles van Access.

Graag hoor ik meer.

Grt.
Johan
 
Er valt volgens mij niet veel uit te leggen. Het is gewoon zeer basic Access.
Via het formulier dat automatisch geopend wordt bij opstarten kan je radiostations met bijbehorende uitzendingen bekijken, toevoegen, wijzigen, verwijderen.

Zoals gezegd moet je de 3 query's qryMaakDoelgebieden, qryMaakStations en qryMaakUitzendingen uitvoeren (op dubbelklikken) om de data vanuit de tabel sked-a22 over te halen naar de "echte" tabellen.
Als dat te moeilijk is, raad ik je aan je eerst eens wat verder te verdiepen in Access en relationele databases. Op deze site staan de nodige handleidingen.

Meer is het (nog) niet. Wat je verder nodig hebt aan formulieren, rapporten en dergelijke weet ik niet (en kan ik ook niet weten).
 
Laatst bewerkt:
Dankje xps350 voor je reactie, je instructie is wel duidelijk, op zich is je uitleg niet moeilijk te begrijpen.

Inderdaad ben ik nog in een beginstadium maar had alles m.b.t. relaties en relationele databases al grondig bekeken en toegepast zonder problemen.

Zelf werk ik ook nog niet lang met access.

Als je nog suggesties e.d. dergelijk hebt, verneem ik dat graag.


grt.
Toby
 
Het is duidelijk dat de database nog niet helemaal af is.
We moeten in ieder geval nog kijken naar de kwestie van het land.
Verder moeten de overige kolommen uit de oorspronkelijke tabel nog een plaatsje krijgen. Zijn dat ook uitzendinggegevens? Wellicht zijn er gegevens bij (taal?l waar we een tabel van moeten maken.
Tot slot is het natuurlijk zo dat je dadelijk de gegevens netjes hebt staan. Dan is het de vraag wat je er allemaal mee wilt doen.
 
@xps351,

Het heeft even geduurd, maar nu antwoord op je vraag.

Alleen UTC, Radiostation, Frequentie , Taal en Doelgebied zijn de belangrijkste velden. Deze hebben het meest met de uitzendingen te maken.
De rest is minder belangrijk.

Groet,
Toby
 
Laatst bewerkt:
Alleen UTC, Radiostation, Frequentie , Taal en Doelgebied zijn de belangrijkste velden. Deze hebben het meest met de uitzendingen te maken.
De rest is minder belangrijk.

In beginsel hoef je dan alleen de taal toe te voegen aan de uitzendingentabel. Het mooiste is dan wel om de talen - naar analogie van de doelgebieden - in een tabel te zetten.
Er zit misschien nog wel een addertje onder het gras. Ik zie bij de taal soms "verdachte" invullingen staan. Bijvoorbeeld waardes die beginnen met een "-" (zit daar wellicht een betekenis achter?) en waardes met een komma (meerdere talen?).

Al doende ontdekte ik dat er uitzendingen in de oorspronkelijke tabel staan die geen doelgebied hebben. Die werden niet toegevoegd. Ik heb dat nu zo aangepast dat die ook toegevoegd worden. De taal is ook niet altijd ingevuld.

In bijlage de voorlopige tussenstand. De tabellen zijn al gevuld.
 

Bijlagen

  • Radiostations03.zip
    647,1 KB · Weergaven: 14
Een keuzeveld bij "Radiostation" zou een goede optie zijn.

Hoe krijg je het voorelkaar om de tabellen te verbergen en alleen het formulier te tonen?
 
Het verbergen van de tabellen doe je ook via de opties voor de huidige database. Zie je eerdere vraag https://www.helpmij.nl/forum/showthread.php/964800-Formulier-access. Zet bij het onderdeel "Navigatie" het vinkje bij "Navigatiedeelvenster weergeven" uit om bij opstarten de tabellen niet zichtbaar te laten zijn. Elders op dit scherm bepaal je trouwens ook welk formulier getoond wordt na opstarten.
Je kan altijd wisselen van weergave met de F11-toetst.

Het is mij niet duidelijk wat je bedoelt met een keuzeveld bij "Radiostation". Wat te kiezen?
 
Hartelijk dank voor je antwoord v.w.b. het verbergen van de tabellen, het werkt perfect en zo leer ik elke keer weer wat bij.

Nu mijn antwoord wat ik bedoel met "keuzeveld".
Een tijdje geleden waren wHee tot de conclusie gekomen dat er zo'n 990 verschillende radiostations zijn.
Met keuzeveld bedoel ik een keuzeveld met invoervak om alle unieke radiostations in te voeren.
Deze moet dan wel gekoppeld zijn aan de tabel die daaronder volgt.
Enige vraag die nog over is: Hoe maak ik die koppeling van het invoerveld met de tabel?
 
Laatst bewerkt:
Een tijdje geleden waren wHee tot de conclusie gekomen dat er zo'n 990 verschillende radiostations zijn. Met keuzeveld bedoel ik een keuzeveld met invoervak om alle unieke radiostations in te voeren. Deze moet dan wel gekoppeld zijn aan de tabel die daaronder volgt.
Nog steeds onduidelijk, wat bedoel je nu eigenlijk? Een keuzelijst gebruik je om waarden te kiezen. Die staan dan dus al in je tabel/keuzelijst. Het invoervakwaar je aan refereert, is een tekstvak in die keuzelijst waarin je een waarde kan intypen zodat je snel naar de lijst springt waar die waarde staat. Het is echter geen invoervak dat automatisch gebruikt kan wordt om nieuwe waarden toe te voegen. Dat kán overigens wel, mits je de gebeurtenis <Bij niet in lijst> gebruikt. Die wordt getriggerd op het moment dat je een niet-bestaande waarde invoert. Daarmee kun je een gebeurtenis laten draaien die (bijvoorbeeld) de getypte waarde toevoegt aan de onderliggende tabel, of je kunt een formulier openen dat is gebaseerd op die tabel. De laatste variant is handig als je per record meerdere gegevens van het station wilt invoeren. Wat bij jou het geval lijkt te zijn.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan