Toon posts:

[Database-ontwerp] Excel gegevens

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik moet een database ontwerpen voor een applicatie waar gegevens momenteel worden aangeleverd in Excel. De Excelfile bevat de waarden van een bepaalde motor die op een bepaald toerental draait met een bepaald kilowattage.

Van de motor worden verschillende gegevens bijgehouden waaronder onderandere:
  • vermogen t.o.v toerental
  • IE-label
  • type toestand motor(goed gesmeerd, slecht gesmeerd, niet gesmeerd,...)
Deze data krijgen we binnen via een Excel-file. Het IE-Label, aantal KW en het toerental kunnen we afleiden uit de bestandsnaam.
In de Excelfile zelf vind je een matrix met 42 rijen en kolommen terug met op de x-as het koppel en op de y-as het toerental.

Even een voorbeeldje:
Afbeeldingslocatie: http://i.imgur.com/5w2ve.png

Zelf dacht ik dat het misschien beter was om de gegevens gewoon in de Excelfile te houden en die run-time te gaan uitlezen wanneer de andere gegevens opgevraagd worden in plaats van de Excel file op voorhand te gaan inlezen in de database.

Hou zouden jullie dit aanpakken? De gegevens uit de Excel-file 1 maal inlezen of de Excelfile gewoon zelf opslaan en deze pas uitlezen als er om gevraagd wordt?

offtopic:
Woeps, zie trouwens nu pas dat ik mijn titel niet verder heb afgeschreven...

[ Voor 4% gewijzigd door Verwijderd op 19-01-2012 22:01 ]


Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 12:35

MAX3400

XBL: OctagonQontrol

Ligt eraan hoe statisch de data is.

Sowieso lijkt het me zinvol om pas in te lezen op het moment dat de data nodig is; weet/denk niet of Excel hier wel zo'n briljant formaat voor is, onder andere als je naar performance gaat kijken bij grote hoeveelheden data.

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • ytterx
  • Registratie: Januari 2009
  • Laatst online: 19-09 18:18
Er zijn een aantal punten waar je rekening mee zou moeten houden.
Een database ontwerp maken maken is één, maar voor zover ik kan zien zijn alle waardes in het excel sheet te berekenen aan de hand van 2 variabelen (koppel & toerental), Als die formule bekend is of achterhaald kan worden dan heb je het probleem gelijk al een stuk kleiner gemaakt.

Mocht dat niet zo zijn zit je met het punt van data inlezen, excel is nou niet echt het formaat hiervoor. Je zou alle data in een tabel moeten zetten. Maar dan wel een tabel voor elke motor anders is het niet bij te houden welke data waar hoort.

nog een optie is om 2 tabelen te maken, 1 voor de motor en 1 voor de data.
Die voor de data als volgt:
  • het id van de motor
  • de waarde van koppel
  • de waarde van toerental
  • de waarde koppel & toerental
Zorgt wel voor een gigantisch onoverzichtelijke tabel.

Laatste optie is om het excel sheet in te lezen en te conventeren naar een ander bestands formaat die je dan weer in leest als nodig is (2 dimensionale array in (binary code) wegschrijven naar file en dan ook weer inlezen).

Het hangt zoals MAX3400 al zegt een beetje vanaf hoe statisch de data echt is.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
ytterx schreef op donderdag 19 januari 2012 @ 23:22:
Als die formule bekend is of achterhaald kan worden dan heb je het probleem gelijk al een stuk kleiner gemaakt.
Ik denk nou net dat de crux is dat je dit niet in een formule kunt gieten maar op basis van metingen zult moeten bepalen (of bepaald zal zijn). De theorie is vast heel leuk, maar de praktijk zal uitwijzen dat 't niet zo mooi zal zijn als je op papier bedenkt. Ik vreet dan ook een spreekwoordelijke beer als hier een eenduidige formule achter zit; hooguit iets dat 't benadert. En dan moet je je afvragen hoe natuurgetrouw je je gegevens wil hebben; "100% zuiver wiskundig" of "zo natuurlijk mogelijk".
ytterx schreef op donderdag 19 januari 2012 @ 23:22:
Maar dan wel een tabel voor elke motor anders is het niet bij te houden welke data waar hoort.
Bull. Een tabel met: motortype_id, koppel, toerental is al voldoende om voor elk type motor een matrix te bouwen. Neem er nog een veld bij op welke aangeeft om welk soort meting ("IE1", "IE2" of weet ik het) gaat a-la "metingtype_id" en je hebt een 3-dimensionale matrix per motortype. En ga zo maar door. Kwestie van gewoon, net als anders, normaliseren.

Je komt zelf ook al tot die conclusie; waarom zou die tabel "enorm onoverzichtelijk" worden? Laat SQL lekker de juiste gegevens uit die miljoenen(?) records bij elkaar sprokkelen. Daar wordt 'ie voor betaald en is 'ie goed in ;)

[ Voor 7% gewijzigd door RobIII op 19-01-2012 23:37 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 14:14

Matis

Rubber Rocket

Als je 42 kolommen en 42 rijen hebt, dan kom je op 1764 waardes uit. Als je dit als float op wilt slaan, dan kun je er zelfs nog voor kiezen om (mocht de data statisch zijn en het motor_id gelijk) de gegevens op de heap te cachen vanuit de database, Excel, CSV whatsoever. Met 4 bytes per float kom je dus uit op nog geen 7KB aan dynamisch geheugen om doorheen te wandelen.
Als je dan kolom 7 rij 3 wilt hebben, pluk je index 133 ((3 * 42) + 7) uit je array en kun je er mee aan de slag.

Peaunuts, voor een hedendaagse machine :)

Ik snap niet waarom je de data vanuit Excel om moet zetten naar een database; Of is het weer zo'n opdracht om de opdracht, of omdat de manager/docent ineens de RDBS-fetish heeft?

[ Voor 14% gewijzigd door Matis op 19-01-2012 23:51 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Matis schreef op donderdag 19 januari 2012 @ 23:47:
Als je 42 kolommen en 42 rijen hebt, dan kom je op 1764 waardes uit. Als je dit als float op wilt slaan, dan kun je er zelfs nog voor kiezen om (mocht de data statisch zijn en het motor_id gelijk) de gegevens op de heap te cachen vanuit de database, Excel, CSV whatsoever. Met 4 bytes per float kom je dus uit op nog geen 7KB aan dynamisch geheugen om doorheen te wandelen.
Als je dan kolom 7 rij 3 wilt hebben, pluk je index 133 ((3 * 42) + 7) uit je array en kun je er mee aan de slag.
Alleen zijn er, als ik TS goed begrijp, meer van die sheets met elk meer van die tabbladen. Goed; moet je nog heel wat van die files hebben om een beetje geheugen (MB's) vol te krijgen natuurlijk.

Maar goed; duidelijk is inmiddels wel dat 't ook afhankelijk is van hoe statisch die gegevens zijn.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De opdracht die we hebben gekregen is op dit moment vrij wazig. Wij moeten voor een ander departement een tool ontwikkelen die de Excel-files die we van een andere school binnen krijgen te gaan verwerken om hier dan mooi grafiekjes uit te laten genereren en de data er wat leesbaar uit te halen.

Het programma moet geschreven worden in C# met een SQL-server. De vraag die ik mij al gesteld heb is: waarom vragen ze niet gewoon aan die externe partij om in plaats van alles in een Excel bestand te plaatsen alles gewoon rechtstreeks in een databank te plaatsen ... Nu is het volgens mij 2 keer werk: Motor -> Excel -> Database.

Nuja, dit jaar is project een apart vak geworden en ik heb zo de indruk dat ze ergens een opdracht zijn gaan ronselen om ons wat bezig te houden ...
ytterx schreef op donderdag 19 januari 2012 @ 23:22:
Er zijn een aantal punten waar je rekening mee zou moeten houden.
Een database ontwerp maken maken is één, maar voor zover ik kan zien zijn alle waardes in het excel sheet te berekenen aan de hand van 2 variabelen (koppel & toerental), Als die formule bekend is of achterhaald kan worden dan heb je het probleem gelijk al een stuk kleiner gemaakt.
De gegevens worden niet ter plaatse berekend maar zijn inderdaad gewoon metingen die door een andere partij gedaan zijn. Deze metingen worden dan in een Excel-bestand gestopt en hier moeten mij mee aan de gang.
ytterx schreef op donderdag 19 januari 2012 @ 23:22:
Mocht dat niet zo zijn zit je met het punt van data inlezen, excel is nou niet echt het formaat hiervoor. Je zou alle data in een tabel moeten zetten. Maar dan wel een tabel voor elke motor anders is het niet bij te houden welke data waar hoort.

nog een optie is om 2 tabelen te maken, 1 voor de motor en 1 voor de data.
Die voor de data als volgt:
  • het id van de motor
  • de waarde van koppel
  • de waarde van toerental
  • de waarde koppel & toerental
Zorgt wel voor een gigantisch onoverzichtelijke tabel.
Voor die gigantisch onoverzichtelijke tabel had ik ook al wat schrik, daarmee dat ik de vraag stel.
ytterx schreef op donderdag 19 januari 2012 @ 23:22:
Laatste optie is om het excel sheet in te lezen en te conventeren naar een ander bestands formaat die je dan weer in leest als nodig is (2 dimensionale array in (binary code) wegschrijven naar file en dan ook weer inlezen).

Het hangt zoals MAX3400 al zegt een beetje vanaf hoe statisch de data echt is.
Ik denk niet dat dat zo'n goed idee is. Nogal vrij omslachtig denk ik dan...
RobIII schreef op donderdag 19 januari 2012 @ 23:35:
[...]

Ik denk nou net dat de crux is dat je dit niet in een formule kunt gieten maar op basis van metingen zult moeten bepalen (of bepaald zal zijn). De theorie is vast heel leuk, maar de praktijk zal uitwijzen dat 't niet zo mooi zal zijn als je op papier bedenkt. Ik vreet dan ook een spreekwoordelijke beer als hier een eenduidige formule achter zit; hooguit iets dat 't benadert. En dan moet je je afvragen hoe natuurgetrouw je je gegevens wil hebben; "100% zuiver wiskundig" of "zo natuurlijk mogelijk".


[...]

Bull. Een tabel met: motortype_id, koppel, toerental is al voldoende om voor elk type motor een matrix te bouwen. Neem er nog een veld bij op welke aangeeft om welk soort meting ("IE1", "IE2" of weet ik het) gaat a-la "metingtype_id" en je hebt een 3-dimensionale matrix per motortype. En ga zo maar door. Kwestie van gewoon, net als anders, normaliseren.

Je komt zelf ook al tot die conclusie; waarom zou die tabel "enorm onoverzichtelijk" worden? Laat SQL lekker de juiste gegevens uit die miljoenen(?) records bij elkaar sprokkelen. Daar wordt 'ie voor betaald en is 'ie goed in ;)
Gewoon in de tabel gooien dan maar?

Acties:
  • 0 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 22:17
Een tabel hoeft niet overzichtelijk te zijn, daar is je ui voor (of desnoods een view of iets dergelijks). En zo onoverzichtelijk is die tabel niet met die vier kolommen

[ Voor 22% gewijzigd door sig69 op 20-01-2012 00:41 ]

Roomba E5 te koop


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op vrijdag 20 januari 2012 @ 00:26:
Nu is het volgens mij 2 keer werk: Motor -> Excel -> Database.
Waarom is dat 2x werk? Je bouwt toch gewoon een script (powershell is uitstekend geschikt, gebruik ik zelf voor een web crawler die data in een excel sheet laad) om de data uit de sheet te lezen, en om te zetten in een groot aantal INSERT .. INTO .. statements? Ik neem aan dat de partij toch wel de data in excel blijft aanleveren, en niet in een of ander databaseformaat omdat jij dat toevallig handig vind. Dat is het voor hun niet.
Verwijderd schreef op donderdag 19 januari 2012 @ 21:47:
Deze data krijgen we binnen via een Excel-file. Het IE-Label, aantal KW en het toerental kunnen we afleiden uit de bestandsnaam.
Uit de naam van de sheet eigenlijk, als ik goed kijk.

[ Voor 6% gewijzigd door Verwijderd op 20-01-2012 09:20 ]

Pagina: 1