Database indeling advies nodig

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Full stack C# .NET web developer, inhouse project

Ben je een C# .NET developer met circa 0 tot 2 jaar ervaring en op zoek naar een nieuwe baan als web developer in Rotterdam? Bij een organisatie waarbij je inhouse kan werken maar wel de afwisseling hebt van telkens nieuwe projecten voor externe klanten? En het liefste een organisatie waar je de zekerheid en mogelijkheden hebt die horen bij een groot bedrijf maar waarbij je tevens de informaliteit en vrijheid hebt van een kleine club? Daarbij natuurlijk een goed salaris, uitstekende pensioenregeling, onkostenvergoeding, de nieuwste versie van de Iphone of Samsung, plus laptop. En de mogelijkheid voor een leaseauto

Bekijk vacature »

GIS Technisch Platform Beheerder (TPB) Open Source

GIS Technisch Platform Beheerder (TPB) Open Source –Infrastructure Functiebeschrijving: Ben jij die resultaatgerichte, technische Platform Beheerder met een passie voor open source software? Lees dan snel verder! Wat ga je doen? Als Technisch Platform Beheerder ben je verantwoordelijk voor het beheren van complexe omgevingen. Dit gebeurt volgens afgesproken service levels, zodanig dat de continuïteit van de processen gewaarborgd blijft. Je houdt je bezig met het onderhouden van software, je bent verantwoordelijk voor het operationeel houden van de bestaande infrastructuur en het in beheer nemen van nieuwe applicaties. Verder heb je een actieve rol in het analyseren van grote en kleine

Bekijk vacature »

Oracle BI Developer

Bedrijfsomschrijving Deze organisatie is internationaal actief binnen de zakelijke dienstverlening en heeft de kwaliteit van de IT afdeling hoog in het vaandel staan. Al vanaf de oprichting, meer dan 30 jaar geleden, heeft de IT afdeling alle systemen in eigen beheer en worden de eigen applicaties inhouse ontwikkeld in onder andere Oracle, Java en OutSystems. Deze applicaties worden in meer dan 15 Europese landen gebruikt en de volledige ontwikkeling hiervan vindt plaats in het hoofdkantoor gevestigd in regio Utrecht. Vanuit hier worden 15 landen (ruim 2200 gebruikers) en duizenden klanten voorzien van support en de juiste IT systemen. De ontwikkelde

Bekijk vacature »

SAP BI DevOps Lead

SAP BI DevOps Lead Functiebeschrijving: Wil jij unieke SAP Business Intelligence oplossingen bedenken, ontwerpen en implementeren die een directe impact hebben op de bedrijfsvoering van onze klanten? Heb jij ervaring met de laatste en modernste tools van SAP in een agile omgeving? En wil jij de lead zijn in het opbouwen en verder professionaliseren van je eigen practice? Wat ga je doen? CGI zoekt een all-round SAP BI DevOps Lead met ervaring in het ontwerpen, bouwen en testen van ETL modellen en reporten door middel van SAP BW on HANA en verwante SAP tools. De SAP BI DevOps Lead kan

Bekijk vacature »

E-learningontwikkelaar

Wil jij meewerken aan de ontwikkeling van hoogwaardige leeroplossingen? En vind je het leuk om bij te dragen aan het opleiden van medewerkers van zorginstellingen die met HiX, onze ICT-totaaloplossing voor de zorg, gaan werken? Dan is dit de perfecte uitdaging voor jou! Jouw baan Je belangrijkste taak is het ontwikkelen van e-learningmodules voor specifieke doelgroepen en het inhoudelijk meedenken over en ontwikkelen van creatieve, didactische concepten voor onze klanten. Ruim 160.000 ziekenhuismedewerkers zijn straks door jóuw producten beter in staat om hun patiënten te helpen. Jouw team Als e-learningontwikkelaar ben je onderdeel van het team Documentatie dat bestaat uit

Bekijk vacature »

Medior PHP Developer

As a PHP Developer at Coolblue, you ensure that our webshops are bizarre fast and super tight. How do I become a PHP Developer at Coolblue? As a Medior PHP Developer you work together with other development teams to make our webshop work as optimally as possible and to make our customers happy. Although you are a PHP Developer, you are not averse to a little C # or Javascript. Want to become an PHP Developer at Coolblue? Else will explain how to do that. You enjoy doing this Writing PHP code, but can also find your way in C

Bekijk vacature »

Oracle BI Developer Automotive Internationaal

Bedrijfsomschrijving Deze organisatie is internationaal actief binnen de zakelijke dienstverlening en heeft de kwaliteit van de IT afdeling hoog in het vaandel staan. Al vanaf de oprichting, meer dan 20 jaar geleden, heeft de IT afdeling alle systemen in eigen beheer en worden de eigen applicaties inhouse ontwikkeld in onder andere Oracle, Java en OutSystems. Deze applicaties worden in meer dan 15 Europese landen gebruikt en de volledige ontwikkeling hiervan vindt plaats in het hoofdkantoor gevestigd in regio Utrecht. Vanuit hier worden 15 landen (ruim 1500 gebruikers) voorzien van server based computing. Om dit mogelijk te maken wordt er gebruik

Bekijk vacature »

Low Code Ontwikkelaar vacature van junior tot seni

Bedrijfsomschrijving Visueel ontwerpen van applicaties middels Low Code en in het specifiek OutSystems is wat je bij deze organisatie gaat doen. Dit betekent niet dat ze geen ruimte hebben voor specialisten binnen bijvoorbeeld Mendix want deze organisatie ademt Low Code. Hier hebben ze ruimte en bovenal ook uitdaging voor ervaren Low Code Ontwikkelaars, maar daarnaast leiden ze ook starters op. Je komt hier te werken met collega’s die echt weten wat ze doen. Dit geeft je de mogelijkheid om ook lekker te sparren met de andere OutSystems Consultants die hier werkzaam zijn. Daarnaast leggen ze alles in gewone mensentaal uit,

Bekijk vacature »

Microsoft 365 Engineer Welkomstbonus € 5.000,

Microsoft 365 Engineer senior Welkomstbonus van € 5.000,- Bij T2 zorgen we goed voor elkaar en doen wij leuke dingen met leuke mensen. We zorgen voor uitdagende opdrachten zodat jij jezelf onbeperkt kan blijven ontwikkelen. Ben jij een ervaren systeembeheerder Microsoft 365 en wil je het beste uit jezelf halen? Dan ben je van harte welkom bij T2 en ontvang je onze welkomstbonus ter waarde van € 5.000,-. Er werken leuke mensen bij T2, die op een professionele en informele wijze met hun carrière en collega’s omgaan. Dat is de basis voor succes! Het is vanzelfsprekend dat je met de

Bekijk vacature »

Junior C# Developer

Bedrijfsomschrijving Onze klant is een innovatieve financiële organisatie in regio Den Haag die momenteel op zoek is naar een junior C# developer. Je zal naast je dagelijkse werkzaamheden meewerken in hele mooie projecten. In zo'n project wordt bijvoorbeeld een oude applicatie vanaf de grond af aan opnieuw gebouwd. De focus ligt hierbij op back-end development, echter zal je soms ook front-end taken op moeten pakken. De organisatie heeft een open cultuur met korte lijnen. Grote hoeveelheden data zijn kenmerkend voor het applicatie landschap, waardoor Business Intelligence een belangrijke rol in de organisatie speelt. Daarnaast zijn duurzaamheid en betrouwbaarheid termen die

Bekijk vacature »

.NET Developer PACS / Multimedia

.NET Developer PACS / Multimedia Wil jij met jouw ontwikkelskills medisch specialisten het optimale uit beeldmateriaal laten halen? Dan is dit jouw droombaan! Ter versterking van ons PACS-team in Amsterdam zoeken wij een ontwikkelaar die verantwoordelijkheid krijgt over zijn ‘eigen’ software. Jouw baan In deze functie ga je medische apparatuur (ECG\echo\OCT\MRI\Etc) integreren in ons EPD. Jij houdt je daarnaast bezig met het maken van software om de verschillende output-formaten van de apparatuur te ondersteunen en te presenteren aan medische specialisten. Tevens ben je verantwoordelijk voor het ontwerpen, ontwikkelen, ondersteunen en onderhouden van je eigen PACS-tools (Picture Archiving and Communication System).

Bekijk vacature »

Dynamics CRM / Developer

Bedrijfsomschrijving Als onderdeel van een grote IT-dienstverlener is deze organisatie ontstaan en is nu gegroeid tot organisatie van bijna 30 man groot. Iedereen binnen deze organisatie houdt zich bezig met het ontwikkelen, beheren, onderhouden van bedrijfskritische applicaties. In tegenstelling tot de moederorganisatie, werken de medewerkers bij deze organisatie gemiddeld drie dagen in de week gewoon op het eigen kantoor in Utrecht. Mede hierdoor heerst er een erg informele sfeer waardoor jij je binnen no-time thuis voelt! De organisatie staat op het punt om een heel nieuw team met specialiteit Dynamics CRM op te tuigen. Nee, je hoeft zeker nog geen

Bekijk vacature »

Full Stack SAP Developer

Discipline Information Technology Location Venlo (NL) Hours a week 40 Full Stack SAP Developer vidaXL is a rapidly growing international organization where IT plays a key part. SAP is a crucial component of vidaXL’s extensive IT landscape. In order to maintain continuous growth and improvement of processes we are looking for an enthusiastic Full Stack SAP Developer. This role focuses mainly on developing, managing and optimizing new and existing processes based on SAP technologies. In addition, we expect our SAP Developer to function as a back-up and a sparring partner for a team of 5+ SAP Developers. You will be

Bekijk vacature »

.NET backend developer, afwisselende projecten, ve

Voor een detacheerder in de regio Rotterdam zijn we op zoek naar een ervaren .NET developer. Het bedrijf bestaat uit circa 100 medewerkers waarvan 10 .NET developers. Dit zijn voornamelijk senior .NET developers. Omdat je via deze werkgever gedetacheerd wordt bij hun klanten, is werk afhankelijk van de opdracht waar je terechtkomt. Dit kan zijn bij een grote verzekeraar maar ook een bouwbedrijf of gemeente. Niet alleen betekent dit om de zoveel tijd (bijvoorbeeld 1 jaar) een nieuwe technische uitdaging maar ook een nieuwe omgeving waarin je terecht komt. Naast de afwisseling in je werk biedt dit bedrijf uitstekende opleidingsmogelijkheden.

Bekijk vacature »

Citrix Engineer

Als Citrix Engineer heb je ervaring met een Global Citrix Virtual Apps and Desktops Site, Citrix Provisioning Services, Thin Clients, App-V Infrastructure , Citrix Workspace Management en neem je deel aan projecten. Je ontwikkelt en verbetert deze diensten, waaronder meedenken en adviseren over het ontwerp en de veranderingen in de technische infrastructuur en nieuwe componenten in informatiesystemen, waaronder het oplossen van derdelijnsstoringen en incidenten. Afdeling je gaat voor je werken Je maakt deel uit van een team van engineers dat deel uitmaakt van de afdeling Global IT Operations. Eisen: Voor deze functie zijn wij op zoek naar iemand die: Is

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

17/01/2021 06:58:40
 
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.