[mysql]table structuur vraag

Pagina: 1
Acties:

  • paragon
  • Registratie: April 2000
  • Laatst online: 21:53
Ik ben vandaag in overleg met iemand over de structuur van een database table. De inhoud ervan wordt best aanzienlijk, in de miljoenen records. Het gaat een 15cijferige reeks die wordt toegevoegd in de database vanuit een spreadsheet. De bedoeling is om op duplicaten te testen. Zitten er duplicaten in dezelfde spreadsheet dan moet er een low level waarschuwing komen en zitten de duplicaten in een andere spreadsheet dan moet er een high lever waarschuwing komen. mijn idee was om met de volgende structuur te komen
id 15digit_idspreadsheet_idblank_1blank_2
13450123456789011NULLNULL
23450123456789231NULLNULL
.........NULLNULL
15003450123456872562NULLNULL
15013450123456854692NULLNULL

hier is id een autoincrement, 15digit_id het eigenlijke indentifiactie nummer van een object en spreedsheet_id de identificatie van het originele spreadsheet doh. De andere persoon is alleen bang voor de grote van de database en wil voor de volgende opzet kiezen.
idphoneid
11
2blank
3blank
4345012345678901
5345012345678923
.......
.......
1500345012345679725
15012
1502blank
1503blank
1504345012345687256
1505345012345685469

[ Voor 15% gewijzigd door paragon op 18-04-2005 15:01 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 07-05 10:04
Het is logisch om voor je apparaten ( tenminste ik neem aan dat die code een imei nummer is ) een aparte tabel te maken.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • paragon
  • Registratie: April 2000
  • Laatst online: 21:53
Jij bedoelt 1 tabel spreadsheet gegevens? Andere tabel imei?

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Als je dat 15 cijferige nummer als sleutel gebruikt in je tabel, dan kan hij er nooit dubbel in komen. Je kan ook eerst zoeken in de database voordat je er een nieuwe bijgooit.

Voor 15 cijferig nummer heb je 50 bits nodig. Ik weet niet welke datatypen je allemaal hebt in de database, maar dit zullen er waarschijnlijk 64 worden. Spreadsheet_id is niet zo groot. Wat er in blank_1 en blank_2 moet komen zie ik niet. Het eerste geval is niet veel groter dan het tweede.
Gebruik in ieder geval geen strings. 15 cijfers + '\0' = 16 bytes = 128 bits. Of zelfs 256 bits als je unicode hebt. Base64-string is weliswaar al iets beter, maar kost nog steeds (50 / 6) = 9 characters + '\0' = 80 bits in het beste geval.

  • paragon
  • Registratie: April 2000
  • Laatst online: 21:53
Het probleem is dus dat ik het 15 cijferige nummer niet als key kan gebruiken. Ze zouden uniek moeten zijn, maar ergens gaat er iets fout en zijn er toch aanzienlijk wat duplicaten. Ze moeten echter wel toegevoegd worden omdat het om leveringen apparaten gaat. En een duplicaat kan in het ergste geval beteken dat een aparaat 2x geleverd wordt :|. Wat er in blank_1 en blank_2 te staan komt weet ik zelf ook nog niet.

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Het enige verschil tussen de voorstellen is dus spreadsheet_id. Dat is een getal en maakt volgens mij niet zoveel uit voor het formaat van je record.

Maar zoals ik al eerder zei: Denk goed na over hoe je dat 15 cijferige nummer op gaat slaan.

[ Voor 25% gewijzigd door Daos op 18-04-2005 14:23 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 07-05 10:04
paragon schreef op maandag 18 april 2005 @ 13:15:
Jij bedoelt 1 tabel spreadsheet gegevens? Andere tabel imei?
Ja :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • paragon
  • Registratie: April 2000
  • Laatst online: 21:53
Daos schreef op maandag 18 april 2005 @ 14:20:
Het enige verschil tussen de voorstellen is dus spreadsheet_id. Dat is een getal en maakt volgens mij niet zoveel uit voor het formaat van je record.

Maar zoals ik al eerder zei: Denk goed na over hoe je dat 15 cijferige nummer op gaat slaan.
Dat is niet het enige verschil, in de tweede optie heb je maar 2 velden en wordt er in het 2de veld ok informatie opgeslagen die er naar mijn mening niet in hoort namelijk: spreadsheet_id, blank en blank. Dit omdat iemand anders dus denkt dat je nu een kleinere database krijgt omdat je voor die informatei geen aparte velden maakt.
Wat verandert dit aan de situatie?

OK dus dit is de bedoeling:

Imei
id 15digit_idspreadsheet_id
13450123456789011
23450123456789231
.........
15003450123456872562
15013450123456854692


Spreadsheets
id blank_1blank_2
1NullNull
2NullNull

[ Voor 40% gewijzigd door paragon op 18-04-2005 15:08 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 07-05 10:04
Je imeinummer kan in meerdere spreadsheets voorkomen, je spreadsheet kan meerdere imeinummers bevatten.

Dit suggereert een veel op veel relatie...dwz dat je tenminste 3 tabellen krijgt, 1 met imeinummers en de gegevens die daarbij horen, 1 met documenten en een koppeltabel

Je kolomnamen blank_1 en blank_2 suggereren dat er nog meer info in die koppeltabel moet komen trouwens. ( Het riekt naar het begin van een minder goed ontwerp )

[ Voor 24% gewijzigd door farlane op 18-04-2005 16:00 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • paragon
  • Registratie: April 2000
  • Laatst online: 21:53
Je bedoelt zoiets:
imei:
imei
345012345678901
345012345678923

Spreadsheets
id datesupplier
1180405compone
2230405comptwo

Koppeltabel
id imeispreadsheet
13450123456789011
23450123456789231

Of niet? Wat is het voordeel hiervan tenopzichte van mijn vorige reply? Ik heb nu ipv blank_1 en blank_2 even iets concreters gebruikt.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 07-05 10:04
Zoiets, maar ik zou het imeinummer zelf geen pk maken maar een unique constraint oid, en een andere pk nemen.

Wat je op deze manier kunt doen:

- Zien welke spreadsheets y naar apparaat met imei code x refereren
- Op welke spreadsheets y apparaat met imeinummer x voorkomen
- Afdwingen dat een appraat met imeinummer x maar een maal voorkomt.
- Afdwingen dat een spreadsheet y maar een maal voorkomt
- Je hebt geen dubbele gegevens in je db
- .....

Ik vind eerlijk gezegd ook dat de opzet er 'logischer' uitziet. :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • paragon
  • Registratie: April 2000
  • Laatst online: 21:53
Maar het probleem is dus dat er op de een of andere manier dus meerdere apparaten met hetzelde imei nummer zijn. Kan dit dan nog wel op deze manier.

Meerdere referenties natuurlijk.

[ Voor 11% gewijzigd door paragon op 19-04-2005 18:05 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 07-05 10:04
paragon schreef op dinsdag 19 april 2005 @ 18:04:
Maar het probleem is dus dat er op de een of andere manier dus meerdere apparaten met hetzelde imei nummer zijn. Kan dit dan nog wel op deze manier.

Meerdere referenties natuurlijk.
Als er meerdere 'echte' apparaten met hetzelfde imei nummer zijn, kan deze opzet niet ( als je die unique maakt ), dan zul je verder moeten normaliseren.
Als je bedoelt dat er meerdere referenties zijn naar hetzelfde imei nummer ( en dus hetzelfde apparaat ) is deze opzet voldoende.

Ik ga er dus van uit dat het imei nummer uniek is en dat je daarmee een apparaat kunt identificeren. ( Was ook een beetje het idee van een imei nummer :) )

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Guldan
  • Registratie: Juli 2002
  • Laatst online: 05-05 21:55

Guldan

Thee-Nerd

Ander zou je in die iMei tabel ook gewoon nog een andere Primary key in kunnen voeren maar dat is niet echt de netste oplossing qua database design. En dan hou je dus nog steeds die koppeltabel. Zoals de structuur er nu staat biedt hij ook meer ruimte voor uitbreiding.

You know, I used to think it was awful that life was so unfair. Then I thought, wouldn't it be much worse if life were fair, and all the terrible things that happen to us come because we actually deserve them?

Pagina: 1