Database indeling advies nodig

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior PHP Programmeur Backend Developer / REST Of

Over het bedrijf: Affiniteit met PHP? Affiniteit met online identificatie? Kennis van OCR Software? Developer Heb je ervaring met PHP, MYSQL, MVC en OOP? Vaste baan: Medior PHP Programmeur Backend Developer Codeigniter 3.000 - 4.300 Wij hebben ruim tien jaar ervaring op het gebied van online verifiëren van persoons- en bedrijfsgegevens in zowel Nederland als het buitenland. Vanuit ruime ervaring en up-to-date expertise adviseren wij klanten en partners onder andere over de diverse mogelijkheden voor het identificeren van personen en/of organisaties. De technische specialisten denken graag met je mee over de mogelijkheden voor de meest optimale oplossing. Er leeft een

Bekijk vacature »

Pega developer

As a Pega developer at Mandemakers in Waalwijk you will make an important contribution to the digitization of our business processes. In your role you will coordinate and attribute to all facets of the digital transformation of our company (fulltime). As a Pega developer you will make an important contribution to the digitization of our business processes. In your role you will coordinate and attribute to all facets of the digital transformation of our company. DMG, a house full of opportunities. You will take part in a great project for DMG and for Pega. You and your team will have

Bekijk vacature »

Application Developer Tech Lead

REMOTE WORK POSSIBLE FOR THIS ROLE As a Tech Lead Developer at UPS you work on delivering functionality for highly complex IT systems. You collaborate in agile teams and participate in emerging technologies and processes like CI/CD and DevOps to ensure that we meet our objectives effectively and efficiently. Your primary role is to perform full system life cycle activities, e.g. analysis, technical requirements, design, coding, testing and the implementation of software. Working in our Europe development center in Eindhoven means working in an international team with onsite people as well as team members located in other parts of the

Bekijk vacature »

Frontend Developer

Hi! Do you want to have an impact on our fast growing digital business in more than 12 countries? And sell online products that contribute to the sustainable use of our scarce water resources? Convert design and your own ideas into code, so that our webshops become a little bit better every day? If so, we are looking for you! FRONTEND DEVELOPER driven, team player, out of the box As an experienced frontend developer, you will ensure that good ideas are translated into functional code. You will build various webbased applications in close cooperation with colleagues from IT, E-commerce and

Bekijk vacature »

Advanced Mendix Developer Logistic Solutions (NL)

Advanced Mendix Developer Logistic Solutions (NL) Den Haag HBO/WO IT Professional "Als Advanced Mendix Developer impact maken op de groeiende E-commerce markt met onze logistieke software en onze kritieke logistieke keten. Je doet dit door ontwikkeling en uitbreiding van onze Mendix Cloud omgeving, waarbij je complexe business processen vertaalt naar kritieke Mendix applicaties." Wat ga je doen? PostNL is becoming a postal tech company. Je komt te werken binnen PostNL Logistic Solutions. Daar gaan we net wat verder dan een standaardpakket of brief. Het gaat bijvoorbeeld om gekoeld vervoer van medicijnen (Health), Warehousing (Fulfilment), het leveren binnen hele strakke tijdvakken

Bekijk vacature »

BI Ontwikkelaar / Junior of Starter (WO) @ Apeldoo

2021-06-15 iSense BI Ontwikkelaar Junior of Starter (WO) Ben jij WO-opgeleid en een junior of starter op het gebied van ontwikkelen? Lijkt het je leuk om in een jaar opgeleid en begeleid te worden en mee te werken als BI-ontwikkelaar? Lees dan snel verder wat dit inhoudt en solliciteer! ISRO50193 Organisatie Als preffered supplier zijn we voor de Belastingdienst (te Apeldoorn) op zoek naar junior BI ontwikkelaars voor het SAS platform. SAS is een geavanceerd Big Data-softwareplatform dat wordt gebruikt voor toegang, beheer, rapportage en analyse van data in allerlei vormen. Jouw eerste jaar staat in het teken van het

Bekijk vacature »

Senior Applicatieontwikkelaar

UPS zoekt een Senior Applicatieontwikkelaar *Thuiswerken is mogelijk voor deze functie Ben jij een gedreven applicatieontwikkelaar met minimaal drie jaar werkervaring? En wil je een uitdagende baan met impact én jezelf breed ontwikkelen? Bij UPS bouw je mee aan complexe systemen die wereldwijd worden gebruikt en krijg je alle ruimte om nóg beter te worden in je vak. Dit ga je doen In een dynamisch scrumteam werk je aan de hand van processen en technologieën zoals CI/CD en DevOps aan het behalen van jullie doelen. Je bent betrokken bij alle facetten van applicatieontwikkeling: van ontwerpen en bouwen tot testen en

Bekijk vacature »

Full stack developer @ Rotterdam

2020-12-18 iSense Full stack developer Full Stack Developer ISRA48618 Organisatie De organisatie waarbinnen je aan de slag zal gaan levert diensten aan een groot aantal organisaties binnen Nederland. De software die zij maken en inzetten voor hun klanten wordt dagelijks door honderden klanten gebruikt. Onze opdrachtgever is marktleider in Nederland als het gaat om full-service HR-dienstverlening. De afgelopen periode is onze klant hard gegroeid en daar zijn de nodige uitdagingen bij komen kijken. Om deze groei voort te kunnen zetten zijn ze op zoek naar nieuwe vaste medewerkers, dit om ervoor te zorgen dat ze marktleider blijven. Zij zijn op

Bekijk vacature »

Sr PHP Backend Developer / Laravel

Over de werkgever: Wij zijn een groep tech-minded developers. Is software-development jouw passie? Heb jij ervaring als developer? Vaste baan: Sr PHP Backend Developer Laravel 3.800 - 5.500 Senior Backend Developer Wij werken uitsluitend met teams van in-house professionals. Daarnaast specialiseren wij ons in het uitdenken, ontwikkelen en opleveren van hoge kwaliteit en schaalbare oplossingen voor MKB en enterprise. Zo ontwikkelen we custom tooling en applicaties voor een aantal bedrijven in de top vijftig van Nederland. Wij werken, zoals gezegd, voor MKB klanten. We hebben veel verschillende projecten. Houd jij van afwisseling? Dan zit je bij ons goed! Wij zijn

Bekijk vacature »

.Net Developer C# / Software

Over het bedrijf: Wij zijn een software ontwikkelaar. Ben jij een Full Stack .Net Developer? Heb je ervaring als .Net Developer Vaste baan: .Net Developer C# Full Stack 3.000 - 4.300 .Net Developer Wij zijn een Nederlandse ontwikkelaar van ERP-software en richten ons op o.a. bouw- en productiebedrijven, die veel te maken hebben met projecten. Wij zijn een veelzijdige organisatie. Je werkt voor onze eigen IT organisatie. We werken met moderne technologie en staan open voor innovatie. Je werkt bij ons in een prettige en informele omgeving. Jouw werkzaamheden als .Net Developer C#: Voor de vacature als .Net Developer Rijssen

Bekijk vacature »

PHP Software Ontwikkelaar / Internettechnologie

Over de werkgever: Wij leveren draagbare en vaste coderingsapparaten Ben jij werkzaam als Developer? Heb jij ervaring met PHP? Ons bedrijf specialiseert zich in de ontwikkeling van draadloze video transmissieapparatuur, Automatische (AI) studio en sportproductie systemen en software voor broadcast en beveiligingsmarkt. Klanten zijn bijvoorbeeld BBC, Al Jazeera, RAI Italië en Disney, maar ook RTL Nederland en de politie. Naast hardware maken wij innovative cloud based services voor de transmissie en opslag van audio en video. Onze bedrijfscultuur kenmerkt zich door het informele karakter en een hands on mentaliteit. Binnen ons bedrijf geloven we sterk in kennisontwikkeling omdat onze klanten

Bekijk vacature »

Senior Node.js Developer (NL) bij PostNL

Senior Node.js Developer (NL) Den Haag HBO/WO IT Professional "Als Senior Node.js Developer impact maken op de groeiende E-commerce markt met onze logistieke software. Je doet dit door complexe bedrijfskritische logistieke business processen te vertalen naar de ontwikkeling en uitbreiding van onze Cloud IT-platformen en software oplossingen in JavaScript en AWS" Wat ga je doen? PostNL is becoming a postal tech company. Als Senior Node.js Developer ben je onderdeel van een multidisciplinair Business-IT-team bestaande uit onder andere een Lead Engineer, JavaScript Developers en Solution Consultants. Samen zijn jullie verantwoordelijk voor het bouwen aan het Event Management Platform (EMP). Dit platform

Bekijk vacature »

Team Lead Applicatie Developers

UPS zoekt een Team Lead Applicatie Developers *THUISWERKEN IS MOGELIJK VOOR DEZE FUNCTIE Heb jij ruime ervaring als applicatieontwikkelaar? En vind je het leuk om boven op de laatste ontwikkelingen in je vak te zitten, mede-developers aan te sturen en altijd te blijven leren? Als Team Lead C# bij UPS werk je aan projecten die in veel verschillende landen worden gebruikt en maak je deel uit van een grote en internationale gemeenschap van agile teams. Dit ga je doen Je gaat aan de slag met het leveren van functionaliteiten voor zeer complexe IT-systemen. Je werkt samen met verschillende agile teams

Bekijk vacature »

Business Intelligence Developer

Role: Business Intelligence Developer (Part time – 2/3 days per week) Location: The Netherlands (Fully Remote) Salary: €42,000 My client, one of the largest retail chains in the Netherlands with 200+ stores is seeking a talented BI Developer to join their team on a part time basis This role is a unique opportunity to maintain the environment and work within an exciting, fast growing organisation. Benefits include: Competitive pay scales Extremely generous holiday entitlement & Bonus Further salary progression based on performance. Flexible working! Pension plan Essential Skills: 3+ years’ experience with Teradata End to end knowledge of business intelligence

Bekijk vacature »

Sr Software Developer / C# ASP.NET

Wie wordt jouw werkgever?: Wij ontwikkelen software. Ben jij een Senior Developer? Heb jij ruime ervaring met het ontwikkelen van software? Vaste baan: Sr Software Developer C# ASP.NET 3.000 - 5.000 Senior Developer Wij zijn een groeiend softwareontwikkelingsbedrijf. Wij ontwikkelen betrouwbare online software voor de overheid op het gebied van van eHerkenning. Wij zijn een veelzijdige organisatie. Je werkt voor onze eigen IT organisatie. We werken met moderne technologie en staan open voor innovatie. Wat ga je precies doen?: Voor de vacature als Senior Developer Zaandam Test ga je het volgende doen: Als Senior Software Developer ben je verantwoordelijk voor

Bekijk vacature »
Jan terhuijzen

jan terhuijzen

10/08/2020 15:54:44
Quote Anchor link
Ik heb veel ervaring met PHP en het bedenken van eenvoudige structuren voor de indeling van een database.
Nu ben ik een systeem aan het maken voor een bedrijf dat verlichting installeert.
Elke opdracht, dus eigenlijk installatie, is een apart object in de database.
Bij installaties kan ook onderhoud worden uitgevoerd, zoals lampen vervangen of noem maar iets. En er kunnen algemene notities worden gekoppeld aan installaties. De notities (met hun datum) vormen samen een soort logboek bij de installatie.

Een installatieadres is vaak verschillend dan het klantadres.
Eenzelfde klant kan meerdere installaties aan zich gekoppeld krijgen.

Ik wil de grootte van de totale data in de database zo compact mogelijk houden, maar tegelijkertijd wil ik ook de queries om gegevens te selecteren zo snel en licht mogelijk kunnen maken.

Hieronder de twee database modellen die ik tot nu toe heb bedacht:

Optie 1

https://snipboard.io/eAjwnh.jpg


Optie 2

https://snipboard.io/pCl2fq.jpg

Waar het grotendeels om gaat is hoe ik adresgegevens opsla. Ik beschouw in het eerste model de adressen als een apart object, dat altijd één op één gekoppeld is aan een ander object dat een adres kan hebben, zoals een klant (factuuradres) en een installatie (als installatieadres). Door de adresgegevens als apart object onder te brengen, bespaart dit velden in de Customers tabel en in de Installations tabel.
Zou een Customer adres hetzelfde zijn als het Installation adres, dan hoeft er maar één rij te worden gemaakt in de Adresses tabel.
Zou je naar model 2 kijken, dan zie je dat ik de adresgegevens niet in een aparte tabel zet, maar gewoon als kolommen opsla in de Customers en Installations tabel. Is het klantadres dan hetzelfde als het installatieadres, dan zijn de waardes van die kolommen dus identiek aan elkaar. Dit kost dan tevens dubbel zo veel data opslag voor de adresgegevens.

Bij ongeveer 90% van de opdrachten is het klantadres en installatieadres hetzelfde. Vandaar dat ik allereerst met model 1 kwam, maar het nadeel hiervan is dat er meer tabellen zijn en meer 'koppelingen'. Daardoor zullen JOIN queries groter worden en mogelijk belastender zijn voor het systeem.

Wat denken jullie dat de beste aanpak zal zijn?
Gewijzigd op 10/08/2020 15:55:15 door Jan terhuijzen
 
PHP hulp

PHP hulp

04/08/2021 10:24:05
 
Thomas van den Heuvel

Thomas van den Heuvel

10/08/2020 16:51:03
Quote Anchor link
Quote:
Ik wil de grootte van de totale data in de database zo compact mogelijk houden, maar tegelijkertijd wil ik ook de queries om gegevens te selecteren zo snel en licht mogelijk kunnen maken.

Maar de grootte doet er niet toe wanneer je de informatie efficiënt kunt raadplegen. Daarom denk ik dat een goed ontwerp, of beter gezegd, een ontwerp dat toegespitst is op het snel opvragen van gewenste informatie, (zo niet vele malen) belangrijker is dan het super efficiënt opslaan van gegevens. Ik bedoel diskruimte is nou niet direct een beperkende factor meer tegenwoordig?

Het lijkt mij inderdaad wel verstandig om het gebruik van adressen nader te bestuderen.

Quote:
Zou een Customer adres hetzelfde zijn als het Installation adres, dan hoeft er maar één rij te worden gemaakt in de Adresses tabel.

Dat klinkt in eerste instantie logisch, maar wat nu als de klant verhuist (zeg nooit nooit :p)? Dan heeft de installatie ineens op een ander adres plaatsgevonden? :)

Omdat adressen verschillende typen hebben, lijkt het mij in ieder geval belangrijk om onderscheid te maken tussen deze verschilende typen, je hebt nu al bijvoorbeeld:
- adres van de klant (bedrijf of particulier)
- adres van de installatie
- (standaard) factuuradres
en misschien kun je hier nog van afwijken met een custom factuuradres en/of andere adrestypen.
(NB of dit nu inhoudt dat dit tot uiting zou moeten komen als een expliciete adres-type-kolom is een tweede, en laat ik nu nog even in het midden, zie het vervolg)

Misschien is het een idee om, omdat het hier ook / met name om een soort van "historische" gegevens gaat, gewoon (elke) keer kopieën trekt van het origineel, of dat je in ieder geval ergens een letterlijke kopie, zoals die op dat moment geldig is in de tijd, bijhoudt. Deze adressen staan dan redundant opgeslagen, maar dit zorgt dan niet voor problemen wanneer een adres wijzigt omdat niet alles aan elkaar hangt.

Het adres van de installatie staat vast lijkt mij, dus in dat opzicht is het in zekere zin logisch om het adres op te slaan in de installatie-tabel zelf.

Aan de andere kant, je zou je ook kunnen laten sturen in het gebruik en de raadpleging van de adressen. Wat voor queries wil je op adressen loslaten? En hoe vaak komt dit voor? Als je makkelijk en snel in *alle* adressoorten wilt zoeken is het waarschijnlijk handiger om deze in één tabel onder te brengen, maar als dat minder voorkomt, of als je vaker zoekt in één soort adres (factuur, installatie) dan zou je je query of queries ook zo kunnen opbouwen dat deze specifieke tabellen raadplegen; het maakt dan in principe niet zoveel uit dat de adressen niet allemaal op dezelfde plek staan.

Er is voor verschillende soorten aanpakken iets te zeggen, maar ik zou dit voornamelijk sturen door het gebruik, en dan liefst op een manier die zorgt voor eenvoudige, snelle queries. Diskruimte komt wat mij betreft op de tweede plaats.
Gewijzigd op 10/08/2020 16:59:19 door Thomas van den Heuvel
 
Ad Fundum

Ad Fundum

10/08/2020 23:05:07
Quote Anchor link
Je hebt de contactgegevens van een medewerker niet in eenzelfde tabel als de contactgegevens van een klant, waarom niet? Omdat het verschillende soorten contactgegevens zijn. Datzelfde geldt voor de adresgegevens van de klant en die van de installatie. Het zijn twee soorten gegevens. Een klant kan bijvoorbeeld verhuizen, en er kunnen facturen naar gestuurd worden. Een adres van de installatie is onveranderlijk. De enige overeenkomst is dat ze dezelfde velden hebben, maar dat had niet gehoeven. Want wat moet een installatie met een postcode? Je kunt er moeilijk brieven naar sturen.

Voor dit probleem heeft een database UDT's (User-Defined Types). Het idee is een beetje als stdClass, je kunt zelf eigenschappen bepalen, en dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
INSERT INTO "tabel" ("mijntype") VALUES (('eigenschap1', 'eigenschap2', ..));
SELECT ("mijntype").eigenschap1, ("mijntype").eigenschap2, .. FROM "tabel"


Dan kom je op iets als onderstaande:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
CREATE SEQUENCE "geslacht_id_seq";
CREATE TABLE "geslacht" (
  "id" bigint NOT NULL DEFAULT nextval('geslacht_id_seq'::regclass),
  "naam" text NOT NULL,
  "aanhef" text NOT NULL,
  PRIMARY KEY ("id")
) WITH (OIDS=FALSE);
COMMENT ON TABLE "geslacht" IS 'Geslacht';
COMMENT ON COLUMN "geslacht"."id" IS 'ID';
COMMENT ON COLUMN "geslacht"."naam" IS 'Naam';
COMMENT ON COLUMN "geslacht"."aanhef" IS 'Aanhef';
INSERT INTO "geslacht" ("naam", "aanhef") VALUES ('Man', 'Dhr.'), ('Vrouw', 'Mw.');

-- adres als UDT
CREATE TYPE "adres" AS (
  "straat" text,
  "huisnummer" text, -- ivm. toevoegingen
  "postcode" text,
  "plaats" text,
  "land" text
);
COMMENT ON TYPE "adres" IS 'Adres';

-- particuliere klant
CREATE SEQUENCE "klant_id_seq";
CREATE TABLE "klant" (
  "id" bigint NOT NULL DEFAULT nextval('klant_id_seq'::regclass),
  "aangemaakt" timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMPTZ,
  "geslacht_fk" bigint NOT NULL,
  "van" date NULL DEFAULT NULL,
  "tot" date NULL DEFAULT NULL,
  "achternaam" text NOT NULL,
  "tussenvoegsel" text NOT NULL,
  "voornamen" text NOT NULL,
  "notitie" text NOT NULL DEFAULT E'',
  "adres" adres NOT NULL,
  PRIMARY KEY ("id"),
  CONSTRAINT "klant_geslacht_fkey" FOREIGN KEY ("geslacht_fk")
    REFERENCES "geslacht" ("id") MATCH SIMPLE ON UPDATE CASCADE ON DELETE RESTRICT
) WITH (OIDS=FALSE);
COMMENT ON TABLE "klant" IS 'Particuliere klant';
COMMENT ON COLUMN "klant"."id" IS 'Klantnummer';  -- geen dubbele PK klantnr / id
COMMENT ON COLUMN "klant"."aangemaakt" IS 'Aangemaakt';
COMMENT ON COLUMN "klant"."geslacht" IS 'Geslacht';
COMMENT ON COLUMN "klant"."van" IS 'Geboortedatum';
COMMENT ON COLUMN "klant"."tot" IS 'Overleden';
COMMENT ON COLUMN "klant"."achternaam" IS 'Achternaam';
COMMENT ON COLUMN "klant"."tussenvoegsel" IS 'Tussenvoegsel';
COMMENT ON COLUMN "klant"."voornamen" IS 'Voornamen';
COMMENT ON COLUMN "klant"."adres" IS 'Adres';
COMMENT ON COLUMN "klant"."notitie" IS 'Notitie';

-- installatie
CREATE SEQUENCE "installatie_id_seq";
CREATE TABLE "installatie" (
  "id" bigint NOT NULL DEFAULT nextval('installatie_id_seq'::regclass),
  "klant_fk" bigint NOT NULL,
  "aangemaakt" timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
  "voltooid" timestamptz NULL DEFAULT NULL,
  "notitie" text,
  "adres" adres NOT NULL DEFAULT E'',
  PRIMARY KEY ("id"),
  CONSTRAINT "installatie_klant_fkey" FOREIGN KEY ("klant_fk")
    REFERENCES "klant" ("id") MATCH SIMPLE ON UPDATE CASCADE ON DELETE RESTRICT
) WITH (OIDS=FALSE);

Je kunt dit voorbeeld doorzetten voor werknemers.

Mocht je met MySQL werken dan kan je veel dingen niet helaas, zoals gebruik maken van UDT's, datums opslaan met tijzone, en foreign keys gebruiken op engines anders dan InnoDB. Omdat je toch een applicatie nieuw ontwikkelt is gebruik van PostgreSQL de betere en minder tijdrovende optie.
Gewijzigd op 10/08/2020 23:06:34 door Ad Fundum
 



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.