Linser är ett populärt tillvägagångssätt för dubbelriktade omvandlingar, en generalisering av problemet med uppdatering av vyer i databaser, där vi vill göra ändringar i källtabeller för att åstadkomma en önskad förändring i en vy. Men kanske överraskande, linser har sällan faktiskt använts för att implementera updatable vyer i databaser. Bohannon, Pierce och Vaughan föreslog en strategi för uppdaterade åsikter som kallas relationslinser, men så vitt vi vet har detta förslag inte genomförts eller utvärderats hittills. Vi föreslår inkrementella relationslinser, som utrustar relationslinser med förändringsförstärkande semantik som kartlägger små förändringar i vyn till (potentiellt) små förändringar i källtabellerna. Vi presenterar också ett språkintegrerat genomförande av relationslinser och en detaljerad experimentell utvärdering, som visar storleksordningsförbättringar jämfört med det icke-inkrementella tillvägagångssättet. Vårt arbete visar att relationslinser kan användas för att stödja expressiva och effektiva vyuppdateringar på språknivå, utan att förlita sig på updatable view stöd från den underliggande databasen. En typisk webbapplikation bygger på en tredelad arkitektur med användarinteraktion på klienten (webbläsaren), applikationslogik på servern och data som lagras i en (vanligtvis relationsbaserad) databas. Relationella databaser använder SQL-fråge- och uppdateringsuttryck, inklusive prognoser, urval och anslutningar, som nära motsvarar välbekanta listförståelseoperationer i funktionella språk. Relationsdatabaser erbjuder datakonsistens och hög prestanda och är tillräckligt flexibla för en rad tillämpningar. Men impedansen missmatchning mellan databasfrågor och konventionell programmering gör även enkla programmeringsuppgifter utmanande [Copeland och Maier 1984]. Språk som C# [Meijer et al. 2006], F# [Syme 2006; Cheney et al. 2013], Länkar [Cooper et al. 2006] och Ur/Web [Chlipala 2015], och bibliotek som Databas-stödd Haskell [Ulrich och Grust 2015], har delvis övervunnit denna utmaning genom att använda språkintegrerad fråga, där frågeuttryck integreras i värdspråket och typsystemet. Detta verk är licensierat under en Creative Commons Erkännande 4.0 internationell licens. Rudi Horn, Roly Perera och James Cheney 1 Information som värddatornamn, port, användarnamn och lösenord som behövs för att komma åt databasen måste också tillhandahållas; detta kan inkluderas i databasuttrycket eller, som här, i en separat konfigurationsfil. 2 Sådana begränsningar kontrolleras för närvarande inte i vårt genomförande, men detta är enkelt och ett ortogonalt problem. Lemma 4.5. Om M-värdet är minimalt för M och M-värdet för M-värdet för M-värdet är lika med värdet för M-värdet för M-värdet (M-värdet för M-värdet för M-värdet) (M-värdet för M-värdet för M-värdet för M-värdet för M-värdet för M-värdet). Definition 4.6 (Delta negate). För alla typer av maskiner : definiera definiera def = (t.o.m.), definiera def = (t.o.m.), definiera definiera def = (t.ex. Definition 4.7 (Delta-skillnad). För alla typer av system, ange (M/N) : (M/N) : (M/N/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/N/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/V/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/M/V/M/M/M/M/M/M/M/M/M/M/M/M/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/V/
Inkrementella Relationella Linser å andra sidan ta den uppdaterade vyn och beräkna ett delta som sedan översätts till ett delta till källtabellerna REF.
Incremental relational lenses
{'venue': 'PACMPL', 'journal': None, 'mag_field_of_study': ['Computer Science']}