MySQL database: tabellen opsplitsen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

C++ Developer

Functieomschrijving Ben jij als software engineer toe aan een nieuwe uitdaging? Dan zijn wij op zoek naar jou! Voor het maken van de procesbesturingsoftware gebruiken onze projectteams een in C++ en C# geschreven tool. Dit is een gedistribueerd object framework wat alle kernfuncties biedt voor een procesautomatisering. Verder zullen jouw werkzaamheden o.a. bestaan uit: Analyseren van vragen en wensen van gebruikers en deze vertalen naar een functioneel ontwerp; Ontwerpen, programmeren en testen van productaanpassingen; Implementeren van nieuwe productreleases in de projectteams; Continu toetsen van het effect van nieuwe releases op andere tools en processen; Inzichtelijk maken van voortgang omtrent softwarewerkzaamheden,

Bekijk vacature »

Senior, Medior and Junior SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Veldhoven Vacature ID: 12696 Introductie Our client is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. Wat verwachten we van jou? SAP Certified Application Associate - SAP HANA Cloud Modeling (training and/or certification) Bachelor degree or higher Excellent understanding of SAP HANA (2.0 / Cloud), Data Modelling and writing

Bekijk vacature »

C# Ontwikkelaar

Functie omschrijving We are looking for a dutch native speaker Wil jij graag aan de slag als C# ontwikkelaar en jouw skills verder ontwikkelen? Zoek niet verder! Als C# ontwikkelaar ga je aan de slag met de volgende taken: (verdere) ontwikkeling van de software voor de interne processen binnen een .net omgeving; optimaliseren van de dataprocessing; ontwerpen en implementeren van zowel desktop- als web-programmatuur; ontwikkeling van tools ten behoeve van consultants en klanten. Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Den Bosch. Zij ontwikkelen business intelligence software voor een specifieke branche. Dit houdt in dat zij dashboards ontwikkelen

Bekijk vacature »

Fasttrack learning & development voor Java dev

Wat je gaat doen: Wij zoeken enthousiaste en ambitieuze junior en medior ontwikkelaars die toe zijn aan de volgende stap in hun carrière. Wij helpen je op je pad naar senior ontwikkelaar door ons fasttrack learning en development programma. Na een kort en intensief programma ga jij aan de slag bij klanten van DPA. Daarnaast krijg je veel ruimte om je te ontwikkelen als persoon en als specialist. De eerste maand gaan we aan de slag om je certificeringen te behalen waaronder OCP (Oracle Certified Professional). Daarnaast nemen we een deepdive in Spring Boot. Ook laten we je kennismaken met

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Junior/Medior Front-end developer

Functie Als Front-end developer werk je intensief samen met 1 van de UX-designers en denk je mee over de gebruiksvriendelijkheid en design van onze web- en mobile apps. Je bent betrokken bij sessies met gebruikers om designs te valideren en usability van de app-in-wording te testen. Vervolgens gebruik je dit om samen met je team waarin ook back-end (.NET) developers zitten, te zorgen voor de realisatie van de best mogelijke apps voor studenten en docenten. Eisen • Je hebt een hands-on development en coding mind-set en werkt graag aan een high quality code base welke je consequent onderhouden kan worden

Bekijk vacature »

Front End Developer React Vue

Dit ga je doen Meewerken aan de implementaties en ontwikkeling van nieuwe functionaliteiten van de webapplicaties; Ontwikkelen met o.a. React en Vue en HTML/CSS, ook krijg je in verband met de samenwerking ook affiniteit met de backend Ruby on Rails; Ontwikkeling aan de front end voor de koppelingen tussen de diverse systemen; Ontwerpen van interfaces en een bijdrage leveren aan de gebruikerservaring; Zorgdragen voor hoge kwaliteit van code en jezelf (en anderen) blijven verbeteren; Als Senior Front End Developer begeleid je zelf ook FE-development projecten, hierin leid je de projecten en pak jij het initiatief op (bv integratieprojecten). Hier ga

Bekijk vacature »

.NET developer

Functie Als .NET ontwikkelaar start jij in een multidisciplinair team met 7 ontwikkelaars. Dit team is verdeeld onder Front-end ontwikkelaars en backend developers. De backend developers werken voornamelijk aan desktop applicaties in combinatie met backend systemen. Hier ga jij dus ook mee aan de slag! Hierbij wordt voornamelijk gebruik gemaakt van C# .NET, WPF, UWP, XAML en MVVM. WPF, UWP, .NET Core, Azure Devops en Entity Framework. WPF en UWP worden dan ook voornamelijk gebruikt voor de user interface van de desktop applicatie. Het development team is dan ook erg gedreven m.b.t. het ontwikkelen van vooruitstrevende en innovatieve horeca automatiseringsoplossingen.

Bekijk vacature »

C#.NET Developer

Functieomschrijving Voor een software ontwikkelaar in de omgeving van Vught zijn we op zoek naar een gemotiveerde C# ontwikkelaar. Deel jij hun passie voor development en dan vooral in C#.NET? Dan kan dit wel eens jouw droombaan zijn! Jouw werkzaamheden zullen er ongeveer als volgt uit gaan zien Door de wensen van de klant goed te begrijpen ga jij aan de slag dit om te zetten naar passende oplossingen en werk je deze uit tot een sterk eindproduct. Je gaat je bezighouden met de ontwikkeling van webapplicaties en websites, dit doe je door middel van ASP.NET, MVC Frameworks en C#.

Bekijk vacature »

Ervaren PHP Developer

Functie omschrijving Jelling IT zoekt ervaren PHP developer! Voor een organisatie in de regio Rhenen zijn wij op zoek naar een ervaren PHP developer die gaat functioneren als een verlengstuk van de klant. Jij bent iemand die technisch complexe zaken met enthousiasme aanvliegt. Je bent in staat om aan meerdere projecten te werken en werkt graag met de nieuwste technieken. In deze functie werk je veel samen met front-end developers en stel je alles in het werk om grote verschillen voor de klanten teweeg te brengen. Verder ben jij iemand die graag zichzelf uitdaagt en die altijd de beste wilt

Bekijk vacature »

Front-end Developer

Functie omschrijving Wij zijn op zoek naar een Front-end Developer! Als Front-end Developer binnen dit softwarebedrijf ga je de frontends voor zowel je eigen interne projecten als die voor klanten opzetten, onderhouden en uitbreiden. Je zet ideeën om naar mooie successen voor de klanten. Dat is in een notendop wat je gaat doen! Wat kun je verwachten? Je werkt aan de doorontwikkeling van bestaande maatwerkapplicaties. Bijvoorbeeld wanneer de klant de applicatie wil uitbreiden met een nieuwe feature; Samen met het team van backenders en desginers zet je nieuwe ideeën van klanten om naar mooie oplossingen; Je werkt met verschillende frameworks.

Bekijk vacature »

Cloud Developer

Cloud Developers opgelet! Bij Luminis zijn ze opzoek naar jou. Lees de vacature en solliciteer direct. Luminis is een software- en technologiebedrijf met meerdere vestigingen. Vanuit deze vestigingen werken 200 professionals aan technisch hoogwaardige oplossingen voor klanten zoals KLM, Nike en Bol.com. Ook ontwikkelt Luminis eigen oplossingen op het gebied van cloud, Internet of Things, data intelligence, e-sports en e-learning. Luminis onderscheidt zich door aantoonbaar voorop te lopen in technologie en innovatie. Luminis heeft drie kernpunten die verankerd zitten in alles wat we doen: het omarmen van nieuwe technologie, meesterschap en kennis delen. Functiebeschrijving First things first! Het is belangrijk

Bekijk vacature »

Als PHP developer (Symfony) bijdragen aan betere z

Functie Als Medior/Senior PHP developer wordt er een mate van zelfstandigheid verwacht, maar ook dat je goed in een team kunt opereren waar kennis wordt gedeeld en er bijvoorbeeld codereviews plaatsvinden. Kwaliteit staat voorop, mede hierom werken ze bijvoorbeeld zonder echte deadlines in hun sprints. De SaaS-applicatie wordt volledig ontwikkeld in PHP en Symfony. De module bestaat uit een stuk informatie verrijking en intelligentie wat resulteert in een medische check. De logica wordt daarom in de code geïntrigeerd. Je bent onder andere bezig met complexe databases waar meer dan 80.000 medicijnen op verschillende niveaus in staan, die maandelijks worden geactualiseerd.

Bekijk vacature »

Senior PHP developer

Functie Jouw werkzaamheden zullen grotendeels bestaan uit het in teamverband ontwerpen, vernieuwen en door ontwikkelen van het systeem. Het is echt back-end werk (bijvoorbeeld het doorontwikkelen van een API) en dit moet je dan ook liggen. Ze zijn niet persee gebonden aan talen of tools maar gebruiken graag de technieken die het beste aansluiten op de gegeven oplossing. Voor nieuwe (versies van) componenten maken ze veelal gebruik van Go(lang). Bij aanpassingen aan bestaande onderdelen gebeurt dit in PHP en C++. Het team is heel divers, er hangt een relaxte sfeer en ze organiseren regelmatig leuke music nights, game nights e.d.

Bekijk vacature »

.NET developer

Functie Als ervaren .NET ontwikkelaar start jij in één van onze vier scrumteams. Met 30 ontwikkelaars werk jij aan de doorontwikkeling van ons core product. Ook werkt jouw team aan maatwerkoplossingen op aanvraag van de klant en op projectbasis. Wij vinden het erg belangrijk dat onze ontwikkelaars met plezier naar werk gaan. Een deel hiervan ligt uiteraard bij jezelf, als jij ontwikkelen niet leuk vindt, ben jij bij ons echt aan het verkeerde adres. Jouw team bestaat namelijk uit een groep gepassioneerde vakidioten die dit werk doen omdat dit eerst een hobby was! Daarnaast wordt er intern rekening gehouden met

Bekijk vacature »
J opla

j opla

15/11/2015 10:50:08
Quote Anchor link
Beste mensen,

Een vraagje over MySQL tabellen. Ik heb ooit gelezen dat je als het even kan tabellen zou moeten opsplitsen in meerdere tabellen als een waarde verschillende keren voor komt. voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
id    plaats        land
1    dorp        nl
2    dorp2        nl
3    dorp3        gb

Als ik het goed begrijp zou je dan van land een nieuwe tabel kunnen/moeten maken en in deze tabel alleen een verwijzing maken naar de index van tabel land.

Mijn vraag is nu:
Wanneer, bij welke aantallen, heeft dit werkelijk nut?

Alvast bedankt,

Jop
Gewijzigd op 15/11/2015 10:50:29 door J opla
 
PHP hulp

PHP hulp

16/11/2024 06:57:57
 
Frank Nietbelangrijk

Frank Nietbelangrijk

15/11/2015 11:07:00
Quote Anchor link
Zolang het één kolom betreft heeft het niet zo veel zin denk ik.
Maar stel dat je naast de landcode ook de volledige naam van het land in de tabel wilt opnemen of nog andere informatie over een land dan zou je naar een extra tabel moeten gaan en deze tabellen met elkaar moeten koppelen.

Twee tabellen koppelen:
- Define two tables (example A and B), with their own primary key
= Define a column in Table A as having a Foreign key relationship based on the primary key of Table B
This means that Table A can have one or more records relating to a single record in Table B.

If you already have the tables in place, use the ALTER TABLE statement to create the foreign key constraint:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
ALTER TABLE A ADD CONSTRAINT fk_b FOREIGN KEY (b_id) references b(id)


fk_b: Name of the foreign key constraint, must be unique to the database
b_id: Name of column in Table A you are creating the foreign key relationship on
b: Name of table, in this case b
id: Name of column in Table B
 
J opla

j opla

15/11/2015 11:43:55
Quote Anchor link
@Frank,

Dank je voor je reactie.

Het gaat mij er om bij hoeveel rijen het nut heeft. Ik neem aan als ik een tabel heb met 3 rijen zoals nu aangegeven dat ik alle gegevens net zo goed in 1 tabel kan houden. En bij 1.000.000 rijen zal het wel verstandig zijn om op te splitsen. Maar waar ligt het omslagpunt? 10, 100, 1000, 10.000? Of nog hoger?

Jop
 
John D

John D

15/11/2015 11:47:58
Quote Anchor link
Zolang het om een twee letterige (ofzoiets) afkorting van het land gaat zou ik geen extra relatie tabel LAND toevoegen, zoals Frank ook al uitlegt. Heeft niets met 10, 100, 1000, 10.000 rijen te maken maar met normaliseren van gegevens. Zoek maar eens op normaliseren en 3e normaalvorm dan wordt een en ander wellicht wat duidelijker.
 
Ben van Velzen

Ben van Velzen

15/11/2015 11:48:01
Quote Anchor link
Het heeft niets te maken met het aantal rijen, maar met het logisch indelen van je data. Zoals Frank heel terecht zegt heeft het voor 1 kolom niet zoveel zin, maar zodra je dus bijvoorbeeld voor een land meerdere dingen wilt opslaan wordt het handig. Als je gewoon de stappen van het normalisren volgt komt de juiste indeling vanzelf naar voren.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

15/11/2015 11:48:47
Quote Anchor link
In principe is het aantal rijen niet van belang en dus zou je het al moeten doen vanaf één of zelfs nul rijen (records noem ik ze liever). Het aantal rijen zullen bij de meeste tabellen namelijk in rap tempo toenemen en bovendien heeft dat verder niets met het database-ontwerp te maken. Het aantal tabellen, kolommen en relaties dat je aanmaakt heeft wel te maken met je database ontwerp.
 
J opla

j opla

15/11/2015 11:55:40
Quote Anchor link
Dank voor jullie reactie. Dus maakt niet uit hoeveel RECORDS ;-) er in de tabel zitten.

Is er nog een andere reden dan dat de tabel logischer is? Voor mijn code vind ik het alleen maar eenvoudiger om alles in 1 tabel te zetten. Geen ingewikkelde query.


Toevoeging op 15/11/2015 11:56:30:

@Frank
Die koppeling van tabellen, kan ik die ook in phpMyAdmin voor elkaar krijgen?
 
Ben van Velzen

Ben van Velzen

15/11/2015 12:37:48
Quote Anchor link
Queries zijn niet relevant voor je datamodel, het gaat altijd om het correct modelleren van je data. Nogmaals: zie normaliseren.
Databases zijn bedoeld om met je data te werken. Laat de database dat ook doen. Zoals het nu lijkt uit wat je van plan bent is PHP het overgrote deel van het rekenwerk te laten doen, en dat is gewoon niet handig.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

15/11/2015 12:42:24
Quote Anchor link
Jop, die kun je inderdaad met phpMyAdmin voor elkaar krijgen. Dat kan zelfs ook via de normale user interface maar je kunt ook mijn code onder de SQL tab in de textarea plakken en dan moet je alleen de tabelnamen en kolomnaam even wijzigen naar jouw situatie.
 
Pipo Clown

Pipo Clown

15/11/2015 13:30:35
Quote Anchor link
Ga jezelf eens inlezen op het onderwerp "normaliseren van databases"
 
Thomas van den Heuvel

Thomas van den Heuvel

15/11/2015 14:45:24
Quote Anchor link
Nog een ander voordeel voor de introductie van een aparte tabel voor bijvoorbeeld "landen" zou zijn dat wanneer je vanuit verschillende tabellen refereert aan de landen tabel je direct efficiente queries kunt schrijven tussen deze tabellen, omdat je gebruik maakt van foreign key die automatisch geïndexeerd worden.

Een ander bijkomend voordeel van de introductie van aparte tabellen/foreign keys is dat er echte "harde" verbanden tussen je tabellen, en tevens met de bijbehorende data, ontstaan. Dit waarborgt (beter) de correctheid van je totale data-set, of omgekeerd, het verkleint de kans op inconsistenties tussen data uit verschillende tabellen. Als bijvoorbeeld een land "in gebruik" is middels een foreign key in een andere tabel, kun je dit landenrecord niet zomaar verwijderen uit de landen-tabel als je je foreign keys goed hebt opgesteld.
Foreign keys kunnen je ook helpen om je database schoon te houden. Stel bijvoorbeeld dat je landen-tabel toonaangevend is in een of andere applicatie, bijvoorbeeld voor reisinformatie en je hebt hier dus al je data aan opgehangen (via foreign keys). Stel dat je op een gegeven moment besluit dat een land geen vakantiebestemming meer is en dat je alle informatie gerelateerd aan land X wilt verwijderen. Indien je geen foreign keys gebruikt (en al je data dus in feite als los zand aan elkaar hangt) zou je dus uit alle gerelateerde tabellen DELETE-queries moeten uitvoeren om deze data te verwijderen. Echter, had je gebruik gemaakt van een echte relationele database (engine, zoals InnoDB) dan had je kunnen volstaan met één DELETE query (DELETE FROM landen WHERE name = 'X'). De foreign keys hebben namelijk ook een "ON DELETE CASCADE" optie, dat wil zeggen, als het record waaraan gerefereerd wordt wordt dit record ook opgeschoond. Voor tabellen die weer aan zo'n tabel refereren geldt hetzelfde, en zo wordt de hele ketting van record in 1x verwijderd.

Dit principe van het gezond/consistent houden van je data wordt ook wel referentiële integriteit genoemd.

Het lijkt mij ook handig om de landen "metadata" op één plaats onder te brengen, deze kun je dan te allen tijde inhoudelijk aanpassen of uitbreiden zonder bestaande relaties tussen tabellen aan te tasten, dat wordt een ander verhaal indien je "nl" ooit besluit te veranderen :).

Als je database (van zichzelf al) meerdere tabellen bevat en hier relaties tussen bestaan ben je eigenlijk al min of meer verplicht om de InnoDB engine van MySQL te gebruiken, op die manier kun je op database-niveau relaties (en bijbehorende constraints) tussen tabellen afdwingen, een ander bijkomend voordeel is dat je toegang krijgt tot een andere functionaliteit: transacties.
 
J opla

j opla

15/11/2015 16:18:12
Quote Anchor link
@pipo
Pipo Clown op 15/11/2015 13:30:35:
Ga jezelf eens inlezen op het onderwerp "normaliseren van databases"

antwoord:
Jopla op 15/11/2015 10:50:08:
Ik heb ooit gelezen dat ...

Ofwel: Ik heb het één en ander gelezen, maar niet de reden gelezen/begrepen waarom.

@ben
Ik begrijp graag de achterliggende reden. Als ik in het water moet springen, wil ik graag weten waarom. ;-)

@Thomas, Frank
Dank je.



Toevoeging op 15/11/2015 16:28:49:

ow...:
wat betekent deze foutmelding? Ik probeer met de code van Frank 2 tabellen aan elkaar te koppelen ...

#1170 - BLOB/TEXT column 'landcode' used in key specification without a key length
Gewijzigd op 15/11/2015 16:21:05 door j opla
 
Ben van Velzen

Ben van Velzen

15/11/2015 17:27:22
Quote Anchor link
Die foutmelding houdt in dat je een TEXT of BLOB voor 'landcode' gebruikt, en dat kan niet als index gebruikt worden, omdat alleen de eerste X tekens geindexeerd kunnen worden. Kies voor een VARCHAR, en gebruik alleen TEXT of BLOB wanneer je dat nodig hebt.

De achterliggende reden is heel eenvoudig, zoals ik eerder ook al heb aangegeven. Het organiseren van je data zorgt dat je database er snel mee om kan gaan, en je applicatie dus eenvoudiger gegevens op een gestructureerde manier kan opvragen. Ook voorkomt normaliseren het maken van fouten. Om terug te komen op de landen, stel dat je een tabel hebt met 4 kolommen: een id, een naam van een persoon, naam van een land en een landcode. Het is nu heel eenvoudig om daar inconsistente data in te zetten, bijvoorbeeld 2x dezelfde landcode met een andere naam van een land. Als je normaliseert en de FK relaties goed legt voorkom je die problemen. Ja, je schrijft dat een JOIN, maar je kan die landen dan hergebruiken voor andere dingen. En een query schrijf je maar 1 keer, dus veel verschil maakt het niet in "eenvoud".
 
J opla

j opla

18/11/2015 22:51:09
Quote Anchor link
Je had helemaal gelijk Ben. Ik zat krampachtig een lengte op te geven aan een tinytxt, maar dat kan dus niet ;-) Het is ook al weer een tijdje geleden dat ik met MySql bezig was dus veel is weggezakt.
 



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.