4D Database-tutorial: een complete gids
Een 4D-databasetutorial begint met vier hoofdobjecten: tabellen, velden, formulieren en methoden. 4D is een relationeel database- en applicatieontwikkelingsplatform van 4D SAS, voor het eerst gelanceerd in 1984, dat gegevens opslaat in een eigen “.4DD”-structuurbestand dat is gekoppeld aan een gecompileerde of geïnterpreteerde applicatielaag. Ontwikkelaars definiëren tabellen, bouwen formulieren en voegen code toe in één geïntegreerde omgeving.
4D neemt een ongebruikelijke plaats in in het toolinglandschap. Het is een combinatie van een relationele database-engine, een rapid application development-omgeving, een webserver en een low-code-achtige formulierontwerper. Deze combinatie is de reden waarom kleine teams het adopteren: één product omvat opslag, bedrijfslogica, UI en implementatie.
De engine is relationeel in de klassieke zin: tabellen, primaire sleutels, bijbehorende tabellen en relaties gedefinieerd in de structuur. Het is niet “SQL first” zoals PostgreSQL of MySQL, hoewel 4D SQL ondersteunt via de SQL-engine en de opdrachten Begin SQL / End SQL.
De meeste dagelijkse taken gebruiken de eigen taal van 4D (historisch 4D Language genoemd, nu eenvoudigweg 4D-code), die dichter bij een scripttaal staat dan bij SQL. Deze 4D-database-tutorialbenadering helpt beginners de veelzijdigheid van de tool te begrijpen.
Twee architecturale feiten zijn al vroeg van belang:
- Structuur versus gegevens. De structuur (tabellen, velden, formulieren, methoden) bevindt zich in een
.4DC/projectbestand in moderne versies; de gegevens bevinden zich in het.4DD-gegevensbestand. In 4D 20 en hoger worden projecten opgeslagen als een map met tekstbestanden, waardoor versiebeheer met Git praktisch wordt. Oudere.4DB-binaire structuren zijn moeilijker te diffen. - Client-server versus enkele gebruiker. Bij een implementatie met één gebruiker wordt alles op één machine uitgevoerd. De client-server scheidt de 4D Server (data + bedrijfslogica) van de 4D Client (UI). Dezelfde structuur ondersteunt beide, maar netwerkroundtrips veranderen de manier waarop u lussen moet schrijven.
Als je van Microsoft Access komt, wordt het mentale model goed overgedragen. Als je van een webstack komt, verwacht dan dat je een aantal gewoonten afleert: 4D-formulieren zijn stateful en gebeurtenisgestuurd, niet request-response.
Gerelateerd: — Het langlopende relationele databaseplatform voor teams die aangepaste apps nodig hebben op desktop, internet en mobiel vanuit één bestand..
Stap 1: Installeer en creëer uw eerste structuur
Download 4D van de officiële 4D-website (4d.com) om deze 4D-database-tutorial te starten. U kiest doorgaans tussen 4D (de volledige ontwikkelomgeving) en 4D Server voor implementatie. Er is een gratis lokale ontwikkelingsmodus om te leren, maar implementatie in productie vereist een licentie: controleer direct de huidige licentievoorwaarden, aangezien deze per release kunnen verschillen.
Een project aanmaken:
- Start 4D en kies Nieuw > Project.
- Geef het project een naam en kies een map. Modern 4D maakt een projectmap aan met daarin
Project/Sources/met uw structuur als tekstbestanden. - De Structuureditor wordt geopend. Dit is uw schematische canvas.
In de structuureditor voegt u tabellen toe. Elke tabel krijgt een naam, een reeks velden en optioneel een automatisch gegenereerde primaire sleutel. De conventie van 4D is om veldnamen vooraf te laten gaan door het type — ID_, Name_, Date_, Amount_ — hoewel dit een kwestie van stijl is en geen vereiste. Consistentie loont later wanneer u 200 velden scant.
Onze keuze: — Een spreadsheet-eenvoudige interface bovenop een echte relationele database, met automatiseringen, weergaven en deelbare interfaces..
Veldtypen die u het meest zult gebruiken: Tekst, Alfa, Integer, Longint, Real, Datum, Tijd, Boolean, Afbeelding, BLOB, Object en UUID. Het type Object slaat JSON-achtige gestructureerde gegevens op en is de moderne keuze voor flexibele attributen. UUID-velden zijn het aanbevolen primaire sleuteltype voor nieuwe tabellen, omdat ze problemen met botsingen en hernummering met automatisch opgehoogde gehele getallen in gedistribueerde of samengevoegde gegevens voorkomen.
Stap 2: Ontwerp tabellen en relaties
Schemaontwerp in 4D volgt relationele normalisatieregels, met een bijzonderheid die specifiek is voor 4D: relaties worden grafisch gedeclareerd en omvatten automatisch gedrag. Dit is een belangrijk onderdeel van elke 4D-database-tutorial.
Om een relatie te creëren, sleept u het primaire sleutelveld van de ene tabel naar het foreign key-veld van een andere tabel in de structuureditor. 4D tekent een relatielijn en stelt u in staat het volgende te configureren:
| Relatie-instelling | Wat het controleert | Praktisch effect |
|---|---|---|
| Automatische relaties | Of 4D gerelateerde records automatisch laadt | Handig voor formulieren; kan verborgen query’s in lussen veroorzaken |
| Eén-op-veel versus veel-op-één | Richting van de link | Bepaalt welke kant de foreign key bevat |
| Gerelateerde tabelnaam | De accessornaam in code | Wordt de eigenschap waarnaar u verwijst, bijv. [Invoice]Customer |
| Verwijderingsbeheer | Cascade, restrict of nullify | Voorkomt wees-childrecords |
Een concreet voorbeeld: een Invoice-tabel met een CustomerID-veld gekoppeld aan Customer.ID. In de code loopt [Invoice]Customer.Name de relatie langs. Dit is elegant – en gevaarlijk in een loop over 10.000 facturen, omdat elke toegang een lookup kan triggeren. De oplossing is om bewust RELATE MANY / RELATE ONE te gebruiken, of om de gerelateerde gegevens eerst in een collectie te laden.
Compromis om vroeg te beslissen: Genormaliseerde tabellen met gedeclareerde relaties bieden referentiële integriteit en eenvoudige code, maar kosten prestaties bij grote leesbewerkingen. Gedenormaliseerde tabellen met ingebedde objectvelden zijn sneller te lezen, maar verschuiven integriteitscontroles naar uw eigen code. Voor de meeste zakelijke applicaties voor kleine teams: normaliseer de transactionele kern en denormaliseer de rapportagetabellen.
Stap 3: Formulieren bouwen
Formulieren vormen de gebruikersinterfacelaag van 4D en zijn er in verschillende typen: detailformulieren (één record), lijstformulieren (meerdere records), invoerformulieren, uitvoerformulieren en projectformulieren (niet gekoppeld aan een tabel). De formuliereditor is een drag-and-drop canvas met een lijst met eigenschappen. Dit is een belangrijk onderdeel van elke 4D-database-tutorial.
Belangrijke concepten bij het maken van een formulier:
- Gegevensbron. Elk formulier is gekoppeld aan een tabel, of aan een variabele/expressie voor projectformulieren.
- Widgets. Velden, knoppen, selectievakjes, vervolgkeuzelijsten, list boxes en hiërarchische lijsten. List boxes zijn het werkpaard voor het weergeven van gerelateerde gegevens en zijn veel krachtiger dan een eenvoudig raster.
- Objectmethoden. Klik met de rechtermuisknop op een object en voeg een methode toe. De methode wordt uitgevoerd op gebeurtenissen zoals
On Load,On Clicked,On Data ChangeenOn Validate. - Formuliermethoden. Het formulier zelf heeft een methode voor gebeurtenissen op formulierniveau, zoals
On LoadenOn Unload.
Een handig sjabloon voor een klantdetailformulier: plaats klantvelden, voeg een list box toe die is gekoppeld aan een selectie van facturen van die klant, en plaats een knop die een methode uitvoert om een nieuwe factuur aan te maken. De selectie in de list box is query- of relatiegestuurd, en het vernieuwen ervan na invoeging houdt de UI actueel.
Waarschuwing: 4D-formulieren zijn stateful. Een formulier bevat een actueel record en een huidige selectie. Het mengen van status op formulierniveau met achtergrondprocessen is de meest voorkomende bron van verwarrende bugs voor nieuwkomers. Houd langlopende taken in een apart proces en publiceer de resultaten terug.
Stap 4: Schrijf methoden en bedrijfslogica
In deze 4D-databasetutorial wordt de 4D-code opgesplitst in methoden, die in verschillende versies beschikbaar zijn:
- Databasemethoden — geactiveerd door databasegebeurtenissen (opstarten, afsluiten, bij back-up).
- Tabelmethoden — geactiveerd door recordgebeurtenissen (bij opslaan, bij verwijderen).
- Formulier- en objectmethoden — geactiveerd door UI-gebeurtenissen.
- Projectmethoden — uw herbruikbare functies, aanroepbaar vanaf elke plek.
- Triggers: voer bewerkingen uit voor/na recordbewerkingen, ideaal voor audittrails.
Moderne 4D-code ondersteunt klassen en het trefwoord “This”, waardoor u objectgeoriënteerde code kunt schrijven in plaats van alleen procedurele code. Een minimale projectmethode ziet er als volgt uit:
// Project method: CreateInvoice
// $1 = customer ID (UUID)
C_OBJECT($invoice)
$invoice:=ds.Invoice.new()
$invoice.CustomerID:=$1
$invoice.Date:=Current date
$invoice.Status:="Draft"
$status:=$invoice.save()
Het ds-object (data store) is de moderne ORM-toegangslaag geïntroduceerd met ORDA (Object Relational Data Access). Met ORDA kunt u werken met entiteiten en entiteitsselecties in plaats van traditionele selecties, en ondersteunt het query chaining, berekende attributen en client-side entiteitsselecties die server-roundtrips verminderen. Voor nieuwe ontwikkelingen is ORDA de aanbevolen route; klassieke commando’s zoals “QUERY” en “CREATE RECORD” werken nog steeds en komen voor in oudere codebases.
Hoe u beslist: Gebruik ORDA voor nieuwe code en alles dat baat heeft bij leesbare en chainbare query’s. Houd klassieke commando’s aan waar u zeer strakke lussen over grote selecties nodig heeft, omdat klassieke selecties in sommige server-side scenario’s geheugenefficiënter kunnen zijn. Meet liever dan dat u aannames doet.
Stap 5: Waardenlijsten, query’s en rapportage
Waardenlijsten vullen vervolgkeuzelijsten en list boxes met een gecontroleerde reeks keuzes. 4D ondersteunt verschillende soorten lijsten:
- Statische lijsten — hardgecodeerde waarden, ideaal voor statussen en vlaggen.
- Tabellijsten — waarden geëxtraheerd uit een referentietabel, ideaal voor klanten, producten en categorieën.
- Hiërarchische lijsten — ouder/kind-waarden, handig voor rekeningschema’s of categoriebomen.
Voor query’s accepteert ORDA’s query() een formulestring met placeholders, wat injectieproblemen vermijdt en duidelijk leesbaar is:
$sel:=ds.Invoice.query("Status = :1 AND Date >= :2"; "Open"; $startDate)
Rapportage in 4D maakt gebruik van de Quick Report-editor voor eenvoudige tabeluitvoer en het 4D Write Pro-gebied voor rijke documenten. Write Pro is een tekstverwerkingsobject ingebed in een formulier; u kunt gegevens samenvoegen in een sjabloon en deze exporteren naar PDF- of DOCX-formaat.
Voor alles wat complex is, is het genereren van HTML en het renderen ervan in een webgebied vaak sneller te maken en gemakkelijker te stylen. Hiermee is dit gedeelte van de 4D-database-tutorial afgesloten.
Stap 6: Implementeren en onderhouden
Implementatieopties geven vorm aan uw architectuur in deze 4D-databasetutorial:
- Enkele gebruiker: applicatie en gegevens op één machine. De eenvoudigste, geen concurrency.
- Client-server — 4D Server bevat gegevens en bedrijfslogica; 4D Client maakt verbinding. Ideaal voor LAN-teams.
- 4D Web Server — 4D serveert rechtstreeks REST-endpoints en webpagina’s. ORDA biedt automatische REST-toegang tot uw datastore, wat betekent dat u een webinterface op hetzelfde schema kunt maken.
- 4D voor iOS / Android — mobiele clients gegenereerd vanuit uw structuur.
Back-ups zijn ingebouwd: 4D Server kan automatische back-ups plannen en een journaal (logbestand) bijhouden voor point-in-time recovery. Schakel het journaal in voordat u live gaat, niet erna. Test een herstel op een kopie van de gegevens: een niet-geteste back-up is een hoop, geen plan.
Versiebeheer: Met structuren in projectmodus commit u de map Project/Sources/ naar Git. Sluit het gegevensbestand en de map DerivedData uit. Dit is een echte verbetering ten opzichte van het binaire tijdperk en de moeite waard om vanaf dag één te adopteren.
Veelvoorkomende fouten en hoe u ze kunt vermijden
Primaire sleuteldiscipline overslaan. Elke tabel heeft een stabiele en unieke primaire sleutel nodig. UUID’s voorkomen hernummeringsproblemen veroorzaakt door automatisch oplopende integers wanneer records worden verwijderd of samengevoegd.
Bedrijfslogica in formuliermethoden plaatsen. Formuliermethoden moeten de gebruikersinterface afhandelen. Verplaats regels naar projectmethoden of klassen, zodat ze kunnen worden hergebruikt door web-endpoints, imports en geplande taken.
Het journaal negeren. Zonder dit kan een crash tijdens het schrijven het gegevensbestand inconsistent maken. Zet het aan.
Looping over relaties. Toegang tot [Table]Related.Field binnen een grote loop vermenigvuldigt het aantal query’s. Laad vooraf met ORDA of gebruik eenmalig “RELATE MANY”.
4D behandelen als SQL. U kunt SQL gebruiken, maar idiomatische 4D-code is over het algemeen korter en beter geïntegreerd met formulieren en gebeurtenissen. Leer eerst de native taal als onderdeel van uw 4D-database-tutorial.
Leerpad en hulpmiddelen
Begin met de officiële 4D-documentatie en de 4D Developer Blog, die ORDA, Write Pro en versie-specifieke wijzigingen behandelt. Het 4D-communityforum is actief en reageert goed op specifieke vragen. Voor de basisbeginselen van relationeel ontwerp die ongeacht het platform van toepassing zijn, bieden het Wikipedia-artikel over relationele databases en de SQL-pagina nuttige informatie over query-normalisatie en semantiek.
Een realistische leervolgorde: maak een contactmanager met één tabel, voeg vervolgens een gerelateerde tabel en list box toe, voeg daarna een waardenlijst en een queryformulier toe, en implementeer vervolgens een client-server. Elke stap introduceert een nieuw concept zonder u te overweldigen.
Belangrijkste conclusies
- 4D combineert een relationele database, IDE, formulierontwerper en webserver in één product, geschikt voor kleine teams die snel een bedrijfsapplicatie op maat moeten opleveren. Deze 4D-database-tutorial benadrukt de efficiëntie ervan.
- Definieer tabellen en relaties in de Structuureditor, maak schermen in de Formuliereditor en koppel logica via methoden en triggers: de vier objecten waaruit elke 4D-toepassing bestaat.
- ORDA (
ds, entiteiten, entiteitsselecties) is de moderne laag voor gegevenstoegang en de aanbevolen keuze voor nieuwe code; klassieke opdrachten blijven geldig in oudere projecten. - Gebruik primaire UUID-sleutels, schakel het journaal in en commit project-modusstructuren vanaf het begin aan Git om pijnlijke migraties later te voorkomen.
- Houd bedrijfslogica uit formuliermethoden en laad gerelateerde gegevens vooraf in, in plaats van relaties binnen grote lussen te laten lopen.
Bronnen en verder lezen
- Relationele database — Wikipedia: Een relationele database (RDB) is een database gebaseerd op het relationele gegevensmodel, zoals voorgesteld door E.F. Codd in 1970. Een Relationeel Database Management Systeem (RDBMS…)
Veelgestelde vragen
Is 4D een SQL-database?
4D is een relationele database met een eigen eigen taal en een geïntegreerde SQL-engine. Je kunt SQL-instructies geven via Begin SQL / End SQL, maar de meeste 4D-ontwikkeling gebruiken ORDA of klassieke 4D-opdrachten in plaats van SQL. Het onderliggende model is relationeel (tabellen, sleutels en relaties), dus SQL-concepten zijn overdraagbaar, zelfs als de syntaxis die u dagelijks schrijft dat niet is.
Moet ik kunnen programmeren om 4D te kunnen gebruiken?
Basiskennis programmeren is erg handig, omdat formulieren en bedrijfsregels zijn gekoppeld aan 4D-code. Dat gezegd hebbende, kunt u met de ingebouwde formuliereditor en wizards van 4D een functionele gegevensinvoertoepassing maken met minimale code. Citizen-ontwikkelaars beginnen doorgaans met formulieren en waardenlijsten en leren vervolgens de methoden die ze nodig hebben voor aangepast gedrag. Voor degenen die beginnen, kan een 4D-database-tutorial nuttig zijn.
Wat is het verschil tussen ORDA en klassieke 4D-opdrachten?
ORDA is een objectgeoriënteerde toegangslaag die is opgebouwd rond een gegevensopslag (ds), entiteiten en entiteitsselecties, met aaneenschakelbare queries en ondersteuning voor selecties aan de clientzijde. Klassieke commando’s zoals QUERY, CREATE RECORD en MODIFY SELECTION werken op klassieke selecties en huidige records. ORDA is de aanbevolen aanpak voor nieuwe ontwikkelingen, terwijl klassieke opdrachten gebruikelijk blijven in oudere codebases.
Kunnen 4D-applicaties op internet of mobiel worden uitgevoerd?
Ja. 4D bevat een ingebouwde webserver en ORDA kan REST-eindpunten via uw gegevensopslag beschikbaar stellen, zodat een front-end van een browser met hetzelfde schema kan communiceren. 4D biedt ook het genereren van mobiele clients voor iOS en Android. Het nadeel is dat web- en mobiele clients goed moeten letten op authenticatie en de hoeveelheid gegevens die door elk verzoek wordt geretourneerd.
Hoe maak ik veilig een back-up van een 4D-database?
Schakel het journaal (logbestand) in 4D Server in, zodat u kunt herstellen naar een bepaald tijdstip en automatische back-ups kunt plannen in plaats van te vertrouwen op handmatige kopieën. Test een herstel altijd met een kopie van de gegevens voordat u deze in een noodgeval nodig heeft. Houd de structuur onder versiebeheer gescheiden van het gegevensbestand, aangezien deze in een ander tempo veranderen.
Is 4D geschikt voor een kleine zakelijke app?
4D is precies voor dit scenario ontworpen: een klein team maakt een bedrijfsapplicatie op maat met formulieren, rapporten en een relationeel schema. Het schaalt naar client-server-implementaties en webtoegang zonder de kernstructuur te veranderen. De belangrijkste overwegingen zijn de licentiekosten en de kleinere talentenpool in vergelijking met reguliere webstacks, dus onderhoud op de lange termijn en bouwsnelheid moeten worden afgewogen.
Veelgestelde vragen
Is 4D een SQL-database?
4D is een relationele database met een eigen moedertaal en een geïntegreerde SQL-engine. U kunt SQL-instructies geven via Begin SQL / End SQL, maar de meeste 4D-ontwikkelingen gebruiken ORDA of klassieke 4D-opdrachten in plaats van SQL. Het onderliggende model is relationeel (tabellen, sleutels en relaties), dus SQL-concepten worden overgedragen, zelfs als de syntaxis die u dagelijks schrijft dat niet doet.
Moet ik kunnen programmeren om 4D te kunnen gebruiken?
Basiskennis programmeren is erg handig, omdat formulieren en bedrijfsregels zijn gekoppeld aan 4D-code. Dat gezegd hebbende, kunt u met de ingebouwde formuliereditor en wizards van 4D een functionele gegevensinvoertoepassing maken met minimale code. Citizen-ontwikkelaars beginnen doorgaans met formulieren en waardenlijsten en leren vervolgens de methoden die ze nodig hebben voor aangepast gedrag. Voor degenen die beginnen, kan een 4D-database-tutorial nuttig zijn.
Wat is het verschil tussen ORDA en klassieke 4D-opdrachten?
ORDA is een objectgeoriënteerde toegangslaag die is opgebouwd rond een datastore (ds), entiteiten en entiteitsselecties, met aaneenschakelbare queries en ondersteuning voor selecties aan de clientzijde. Klassieke commando's zoals QUERY, CREATE RECORD en MODIFY SELECTION werken op klassieke selecties en huidige records. ORDA is de aanbevolen aanpak voor nieuwe ontwikkelingen, terwijl klassieke opdrachten gebruikelijk blijven in oudere codebases.
Kunnen 4D-applicaties op internet of mobiel worden uitgevoerd?
Ja. 4D bevat een ingebouwde webserver en ORDA kan REST-eindpunten via uw gegevensarchief beschikbaar stellen, zodat een front-end van een browser met hetzelfde schema kan communiceren. 4D biedt ook het genereren van mobiele clients voor iOS en Android. Het nadeel is dat web- en mobiele clients goed moeten letten op authenticatie en de hoeveelheid gegevens die door elk verzoek wordt geretourneerd.
Hoe maak ik veilig een back-up van een 4D-database?
Schakel het journaal (logbestand) in 4D Server in, zodat u kunt herstellen naar een bepaald tijdstip en automatische back-ups kunt plannen in plaats van te vertrouwen op handmatige kopieën. Test een herstel altijd met een kopie van de gegevens voordat u deze in een noodgeval nodig heeft. Houd de structuur onder versiebeheer gescheiden van het gegevensbestand, aangezien deze met verschillende snelheden veranderen.
Is 4D geschikt voor een kleine zakelijke app?
4D is precies voor dit scenario ontworpen: een klein team maakt een bedrijfsapplicatie op maat met formulieren, rapporten en een relationeel schema. Het schaalt naar client-server-implementaties en webtoegang zonder de kernstructuur te veranderen. De belangrijkste overwegingen zijn de licentiekosten en de kleinere talentenpool in vergelijking met reguliere webstacks, dus onderhoud op de lange termijn en bouwsnelheid moeten worden afgewogen.
Bouw in één dag een klantenportaal
Een databasebouwer zonder code, gericht op portals, directory's en interne tools, met vaste prijzen in plaats van kosten per gebruiker.