In priore articulus Conceptum et exsecutionem database ex functionibus magis quam tabulis et agris tamquam in databases relationis aedificatae notionem descripsi. Pluribus exemplis praebebat commoda accessus ad unum classicum. Multi eas non satis persuaserunt.
In hoc articulo ostendam quomodo conceptus iste permittat te cito et commode librare scribentem et perlegisse ad datorum sine ulla mutatione in logica operante. Similia functionalitas temptata est ut in hodiernis DBMSs commercialibus (praesertim, Oraculum et Microsoft SQL Servo). In fine articuli monstrabo ea quae fecerunt, ut mitius fiat, non optime elaborasse.
Description
Ut prius, ad melius intelligendum, exemplis incipiam descriptionem. Dicamus nos ad logicam efficiendam necessariam esse quae indicem Dicasteriorum reddet cum numero conductorum in eis et eorum salario totalis.
In database munus muneris hoc spectare esset:
CLASS Department βΠΡΠ΄Π΅Π»β;
name βΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅β = DATA STRING[100] (Department);
CLASS Employee βΠ‘ΠΎΡΡΡΠ΄Π½ΠΈΠΊβ;
department βΠΡΠ΄Π΅Π»β = DATA Department (Employee);
salary βΠΠ°ΡΠΏΠ»Π°ΡΠ°β = DATA NUMERIC[10,2] (Employee);
countEmployees βΠΠΎΠ»-Π²ΠΎ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ²β (Department d) =
GROUP SUM 1 IF department(Employee e) = d;
salarySum βΠ‘ΡΠΌΠΌΠ°ΡΠ½Π°Ρ Π·Π°ΡΠΏΠ»Π°ΡΠ°β (Department d) =
GROUP SUM salary(Employee e) IF department(e) = d;
Complicatio huius quaestionis exsequendi in quibusvis DBMS aequivalebit O (numerus conductorum)quia haec calculus totam mensam operariorum intuens requirit ac deinde eos per department coniungit. Erunt etiam aliquae parvae (credimus plures esse operarios quam departments) supplementum secundum electionem consilii O (log numerus conductorum) aut O (number of Dicasteria) pro copula et sic deinceps.
Patet exsecutionem capitis in diversis DBMSs esse diversam, sed multiplicitas nullo modo immutabit.
In exsecutione proposita, munus DBMS unum subqueriam generabit, quae valores requisitos pro department computabit, et deinde iungo cum tabula department ad nomen obtinendum. Unicuique tamen functionis cum declarando, potest specialem titulum materiali praeponere. Systema sponte creabit campum respondentem pro quolibet tali functione. Cum valor functionis mutatur, valor agri in eodem negotio mutabitur. Cum hoc munus accesserit, campus prae-calculatus accessus erit.
Praesertim si materialized ad munera posueris countEmployees ΠΈ salariSumtunc duo agri ad mensam accedent cum indice Dicasteriorum, qui numerum conductorum et eorum salarium totum reponunt. Cum mutatio operariorum, salariorum vel societatum departmentarum mutatur, ratio automatice valores horum agrorum mutabit. Pro quaestione superiore hos agros accessurum directe ac exsecutioni mandabitur O (number of Dicasteria).
Quae sunt restrictiones? Unum tantum: talis functio debet habere numerum finitorum valorum inputatorum pro quibus eius valor definitur. Alioquin impossibile erit mensam construere, quae omnia bona sua reponit, cum infinitis ordinibus non possit esse mensa.
exempli gratia:
employeesCount βΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² Ρ Π·Π°ΡΠΏΠ»Π°ΡΠΎΠΉ > Nβ (Department d, NUMERIC[10,2] N) =
GROUP SUM salary(Employee e) IF department(e) = d AND salary(e) > N;
Hoc munus definitur pro infinitis valoribus ipsius N (exempli gratia: cuiuslibet valoris negativus est conveniens). Ergo non potes in eo materiatum ponere. Haec igitur limitatio logica est, non una technica (id est, non quia eam efficere non potuimus). Secus non sunt restrictiones. Potes uti coetus, voluptua, ET, OR, PARTITIO, recursus, etc.
Exempli gratia, in problemate 2.2 articuli praecedentis, materiatum in utraque functione ponere potes:
bought 'ΠΡΠΏΠΈΠ»' (Customer c, Product p, INTEGER y) =
GROUP SUM sum(Detail d) IF
customer(order(d)) = c AND
product(d) = p AND
extractYear(date(order(d))) = y MATERIALIZED;
rating 'Π Π΅ΠΉΡΠΈΠ½Π³' (Customer c, Product p, INTEGER y) =
PARTITION SUM 1 ORDER DESC bought(c, p, y), p BY c, y MATERIALIZED;
SELECT contactName(Customer c), name(Product p) WHERE rating(c, p, 1997) < 3;
Ratio ipsa unam mensam cum clavium speciebus creabit Customer, Product ΠΈ INTEGERduos agros adiciet eique agrum novis mutationibus in eis renovabit. Cum ulteriores vocationes ad has functiones fiunt, non computabuntur, sed valores ex agris respondentibus legentur.
Hac mechanismo utens, exempli gratia, recursiones (CTE) in quaestionibus removere potes. Speciatim considerare circulos qui arborem formant utentem relationem prolis/parentis (unaquaeque societas nexum habet cum suo parente);
parent = DATA Group (Group);
In database operando, recursio logica sic specificari potest:
level (Group child, Group parent) = RECURSION 1l IF child IS Group AND parent == child
STEP 2l IF parent == parent($parent);
isParent (Group child, Group parent) = TRUE IF level(child, parent) MATERIALIZED;
Cum ad munus isParent signatur materiatum, deinde mensa cum duabus clavibus (coetibus) creabitur pro ea, in qua campus. isParent verum erit, si prima clavis sit proles secundae. Numerus viscusrum in hac tabula aequalis erit numero circulorum qui mediocris altitudine arboris multiplicantur. Si opus est, verbi gratia, numerum posteritatis cuiusdam coetus numerare, hoc munere uti potes;
childrenCount (Group g) = GROUP SUM 1 IF isParent(Group child, g);
Nulla CTE in quaestione SQL erit. Pro simplex erit.
Hac mechanismo utens, facile denormificare potes datorum, si opus sit;
CLASS Order 'ΠΠ°ΠΊΠ°Π·';
date 'ΠΠ°ΡΠ°' = DATA DATE (Order);
CLASS OrderDetail 'Π‘ΡΡΠΎΠΊΠ° Π·Π°ΠΊΠ°Π·Π°';
order 'ΠΠ°ΠΊΠ°Π·' = DATA Order (OrderDetail);
date 'ΠΠ°ΡΠ°' (OrderDetail d) = date(order(d)) MATERIALIZED INDEXED;
Cum munus vocant Date ordo lineae, campus cui index est, ex tabula linearum ordine legetur. Cum ordo date mutationes, ratio ipsa automatice diem in linea denormatum reputabit.
Beneficia
Quaenam haec tota machinatio est? In classic DBMSs, sine interrogatione rescriptis, elit vel DBA potest tantum indices mutare, statistica determinare et consilium interrogationis indica quomodo ea exequatur (et HINTs tantum in commercial DBMSs praesto sunt). Quantumvis difficile nitantur, primam interrogationem in articulo "in" absolvere non poterunt O (de numero departments) sine mutantur queries vel addit triggers. In schemate proposito, in scaena evolutionis cogitare non debes de structura repono notitiarum et quibus aggregationibus uteris. Haec omnia facile immutari possunt in muscam, protinus in operando.
Usu in illum tamquam id. Nonnulli logicam directe enucleant in munere vicino. Algorithmos eorumque complexionem non intelligunt, neque consilia exsecutionis, neque genera iuncturarum, neque alia technica componentia. Negotium analystae magis sunt quam tincidunt. Deinde haec omnia in probationem vel operationem. Logging dat longi currit queries. Cum longa interrogatione deprehensa est, alii homines (technicorum magis - essentialiter DBA) decernunt ut in aliquo munere intermedio materiali efficiatur. Hoc in scriptione aliquantulum cohibetur (quia campum additicium in re gerenda requirit). Nihilominus non solum haec quaestio signanter acceleratur, sed etiam omnes alii qui hoc munere utuntur. Simul, quod munus materiare faciliter statuendum est. Duo parametri principales: numerus valorum possibilium initus (hoc est quot litterae erunt in tabula respondente), et quotiens in aliis functionibus adhibetur.
analogs
Moderni commercial DBMSs similes mechanismi habent: materialised visum cum GRAVITER REFECTO (Oraculum) et indexed VIEW (Microsoft SQL Servo). In PostgreSQL View materialised in transactione renovari non potest, sed solum in rogatu (et etiam cum restrictionibus valde strictis), ideo non cogitamus. Sed plures habent difficultates, quae significanter suum usum circumscribunt.
Uno modo, solum efficere potes materializationem, si regularem conspectum iam creasti. Alioquin reliquas petitiones rescribere debebis ut accessus ad intuitum nuper creatum hac materia utendi. Aut omnia ut dictum est relinque, sed inefficax saltem erit si certa notitia iam praevia sit, sed plures interrogationes non semper utuntur, sed recalculant.
Secundo habent multitudinem restrictionum;
Oraculum
5.3.8.4 Cohibita Generalis in Fast Renovare
Investigatio definitiva opinionis materialismi coarctatur hoc modo:
Sententia materialista non debet continere references ad voces non-repetitas sicut SYSDATE et ROWNUM.
In materia visum non habet references to RAW or LONGRAW data generum.
Non potest continere a SELECT indicem subactam.
Non potest continere functiones analyticas (exempli gratia: RANK) in SELECT clause.
Non potest referri ad mensam in qua est XMLIndex index definitur.
Non potest continere a MODEL clause.
Non potest continere a HAVING clause with subquery.
Non potest continere nested queries quae habent ANY, ALLaut NOTEXISTS.
Non potest continere a [START WITH β¦] CONNECT BY clause.
Non potest multas singulas tabulas in diversis locis continere.
ONCOMMIT materiata views detail tabulas remotas habere non potest.
Sententiae materiatae nidificari debent habere iungere vel aggregatum.
Materialiter iungere views ac materialized aggregatum views cum a GROUPBY clausula non potest eligere ex tabula indicem-ordinatum.
5.3.8.5 restrictiones in Fast Renovare in materiatis Views cum Joins Only
Quaeritur definiens pro materialibus sententiis cum iunctis tantum et nulla aggregata restrictiones sequentes in refoveo celeriter:
Ordines omnium tabularum in the " FROM album debet in SELECT indicem quaesitum.
Materiata sententia omnia cum rowids existere debent pro omnibus tabulis basi in the FROM indicem quaesitum.
Non potes creare ieiunium materiatum reficiendi intuitum ex pluribus tabulis cum iunctis simplicibus quae objectum speciei columnae in theca includunt SELECT dicitur.
Item, modum quem vis refice, non optime efficiens si:
Investigatio definitiva iuncturam exteriorem adhibet quae sicut iungendum interiorem gerit. Si quaestio definitiva talem coniunctionem contineat, considera interrogationem definitivam rescribere ut iungerem interiorem contineat.
quod SELECT index sententiarum materialisarum in columnis e multiplicibus tabulis expressas continet.
5.3.8.6 restrictiones in Fast Renovare in materiatis Views cum aggregatis
Quaeritur definiens pro materiatis sententiis cum aggregatis vel iunctis restrictiones sequentes in fastigio reficiendi;
Fast reficite utrumque facit ONCOMMIT et ONDEMAND sententiarum materiata, tamen restrictiones sequentes applicamus:
Omnes tabulae, quae in materia sunt, ligna materiari debent, et materia visum materiari debet;
Omnes columnas e tabula in promptu materiali continent.
Specificare cum ROWID et INCLUDINGNEWVALUES.
et specificare SEQUENCE clausula si mensa expectatur mixtum inserendi/directi-onere, delete, et updates habere.
tantum SUM, COUNT, AVG, STDDEV, VARIANCE, MIN et MAX fulciuntur, celeriter reficiuntur.
COUNT(*) specificari debet.
Functiones aggregatae nonnisi ut extremam locutionis partem contingere debent. Id est, aggregata sicut AVG(AVG(x)) or AVG(x)+ AVG(x) Non licet.
Pro unoquoque aggregato ut AVG(expr)Et correspondentes COUNT(expr) adesse debet. Oraculum commendat SUM(expr) nominari.
If VARIANCE(expr) or STDDEV(expr) specificatur; COUNT(expr) et SUM(expr) specificari debet. Oraculum commendat SUM(expr *expr) nominari.
quod SELECT Columna in interrogatione definitiva non potest esse expressio complexa cum columnis e tabulis basi multiplicibus. Possibile huic laboranti est uti intuitu materiato nidificato.
quod SELECT album debet continere omnia GROUPBY columnas.
Visum materialisatum in una vel remotioribus tabulis non fundatur.
Si vos utor a CHAR typum in columella columellae datae in columella materiati visi, indoles situs magistri et sententia materialisa idem esse debet.
Si sententia materiata unum ex sequentibus habet, celeriter reficiendum tantum in conventionalibus DML inserendis et oneribus directis sustinetur.
Materialized views cum MIN or MAX scilicet universitates
Materies views quae habent SUM(expr) sed non COUNT(expr)
Materies views sine COUNT(*)
Talis sententia materializata appellatur insitum solum materiatum visum.
A sententia cum materiata MAX or MIN celere reficibile est post deletas vel mixtas DML constitutiones si non habet a WHERE clause.
Max/min ieiunium reficit cum deleta vel mixta DML mores eosdem non habet cum casu tantum insertos. Delet et recomputat valores vulgares/min pro coetibus affectis. Opus est ut conscius sui effectus luctus.
Sententias materiales cum nomine views aut subqueries in FROM clausula cito refici potest, dummodo sententiae plene confundantur. Ad informationem de qua opiniones confundantur, vide Oraculum Database SQL Language Reference.
Si conjunctiones externae non adsunt, excerpta arbitraria et in thesi junctas habere potes WHERE clause.
Sententias aggregati materiales cum iunctis externis celeriter reficiuntur post conventionales DML onera et directa, modo mensa externa mutata est. Item, singulares angustiae esse debent in junctis columnis tabulae junctae interioris. Si iunctiones exteriores sunt, omnes nexus iungi debent ANDs et aequalitate uti debet (=) operator.
Nam materialibus views cum CUBE, ROLLUPcopulationes, vel concatenationes, restrictiones applicandas;
quod SELECT album contineat adjunctio distinguens vel esse a GROUPING_ID munus in omnibus GROUPBY expressions or * GROUPING munera pro unaquaque GROUPBY loquendi. Ut si GROUPBY clausula sententiarum materialium est "GROUPBYCUBE(a, b)", tum SELECT album debet continere vel "GROUPING_ID(a, b)Β» vel Β«GROUPING(a)ANDGROUPING(b)Β» ad visum materiatum ut reficiatur ieiunium.
GROUPBY non in aliqua duplicata coetus. Verbi gratia, "GROUP BY a, ROLLUP(a, b)" refrigerium non ieiunat quia in duplicata connexione consequitur "(a), (a, b), AND (a)".
5.3.8.7 Restrictiones in Fast Renovare in materiatis Views unio OMNES
Materialized views cum UNIONALL set operator support REFRESHFAST optio, si sequenti condiciones satisfaciant;
Investigatio definitiva debet habere " UNIONALL operator in summo gradu.
quod UNIONALL operator intra subqueriam immergi non potest, uno excepto: The UNIONALL potest esse in subquery in FROM clausula dummodo definitio quaestionis sit formae SELECT * FROM (Visum vel subquery cum UNIONALL) ut in hoc exemplo:
CREATE VIEW view_with_unionall AS (SELECT c.rowid crid, c.cust_id, 2 umarker EX clientibus c WHERE c.cust_last_name = 'Smith' CONIUNCTIO OMNES SELECT c.rowid crid, c.cust_id, 3 umarker EX clientibus c WHERE c.cust_last_name = ' Jones'); CREATE MATERIALIS VIUM unionall_inside_view_mv GRAVITER REFOVEO QUAM SELECT * FROM view_with_unionall;
Nota quod visum view_with_unionall satisfaciet, celeriter reficite.
Quisque interrogatione intercluderetur in the UNIONALL interrogatione satisfaciendum est de sententia materiae reficiendi ieiunium cum aggregatis vel de sententia celeri materiato cum iunctis reficiendi.
Opportunum visum materiatum tigna creari debent in tabulis, quae requiruntur ad congruentem aspectum ieiunandi reficiendi materiatum.
Nota quod Oraculum Database etiam casum specialem admittit unius tabulae sententiarum materiatorum cum iunctis tantum instructis ROWID in columna inclusa est SELECT album et in materiata sententia log. Id ostenditur in definitione cuiusdam sententiae view_with_unionall.
quod SELECT index cuiusque interrogationis includere debet a UNIONALL titulum, ac UNIONALL columna debet habere distinctam constantem numerorum vel filum valorem in unaquaque UNIONALL ramum. Praeterea , titulus columnae eodem modo ordinarie in eodem loco apparere debet SELECT indices singularum interrogationum intercluderent. Vide "CONIUNCTIO OMNIA Mark et Query RewriteΒ» Pro magis notitia de UNIONALL venalicium.
Quaedam lineamenta qualia extrinsecus iungunt, solum aggregatum visum materiatum quaestionibus insertum et tabulae remotae non praebentur ad opiniones materiatas cum UNIONALL. Sciendum tamen est quod opiniones materiales in replicando adhibitas, quae compages vel aggregationes non continent, celeriter refici possunt, cum UNIONALL seu mensae remotae utuntur.
Compatibilitas initialization parametri ad 9.2.0 vel altius ad faciendam jejunium recreabilem visum materialismum constituendum est UNIONALL.
Oraculum fans offendere nolo, sed ex limitationibus suis iudicans, videtur hanc mechanismum non in universali casu, utendo aliquo exemplari, sed mille Indorum, ubi quisque occasio data est, scripta. suos scribentes, et quilibet eorum fecit quod potuit. Hoc machinamentum ad logicam realem utens est sicut per minefield ambulans. Meam aliquando potes unum ex restrictionibus non manifestis feriendo. Quomodo etiam quaestio separata operatur, sed extra ambitum huius articuli.
Microsoft SQL Servo
Additional Requirements
Praeter praescriptiones optiones et functiones determinatas requisita, sequentia requisita occurrere debent:
A user qui facit CREATE INDEX dominus debet esse visum.
Cum indice creas, the IGNORE_DUP_KEY optio ponenda est ad ON (per default occasus).
Tabulae referendae sunt duobus nominibus ex parte. schema.tablename in sententia definitionis.
Munera usoris definita referenced in visu creari debent utendo WITH SCHEMABINDING optio.
Munera quaevis usor-definiuntur secundum quod in visu referuntur nomina duo-partita; ..
Notitia accessum proprietatis usoris definitae functionis debent esse NO SQLet accessus externi proprietas debet esse NO.
Munera linguae vulgaris runtime (CLR) apparent in indice sententiarum selectorum, sed non potest esse pars definitionis clavem indice glomerati. functiones CLR non possunt apparere in WHERE clausulae sententiae vel ON clausulae a JOIN operationis in visu.
functiones et rationes CLR generum usoris definitorum in sententia definitionis adhibitorum habere debent proprietates positas ut in sequenti tabula demonstratum est.
Property
Nota
DETERMINISTIC = VERUM
Expresse declarandum est modum attributum Microsoft .NET Framework.
LIQUIDUS = VERA
Explicate declaranda est methodus .NET Framework attributum.
DATA ADITUS = NO SQL
Determinatum ponendo DataAccess attributum DataAccessKind.None et SystemDataAccess attributum SystemDataAccessKind.None.
ACCESSU EXTERNUS = NO
Haec proprietas ad NO defaltam facit pro consuetudines CLR.
Visum debet creari utendo WITH SCHEMABINDING optio.
Visum referre debet tabulas solas bases quae in eadem datorum conspectu sunt. Sententia non potest ad alias opiniones referre.
Propositio SELECTA in definitione sententiae non debet continere elementa Transact-SQL sequentia:
1 Visum potest continere indexed supernatet Columnae; attamen tales columnae in clavem indice fasciculato includi non possunt.
If GROUP BY praesens est, sententia definitionis debet continere COUNT_BIG(*) et non debet continere HAVING. haec GROUP BY restrictiones tantum applicandae sunt ad definitionem sententiarum indicatam. Quaesitum est ut visum indicetur in eius consilio exsecutionis, etiamsi his non satisfacit GROUP BY velit congue consectetuer.
Si sententia definitionem contineat GROUP BY clausula, clavis unici indicis aggregati referre potest tantum columnas in the defixos GROUP BY clause.
Patet hic Indos non implicari, cum id facere decreverint secundum rationem "parum, sed bene". Hoc est, plures fodinas habent in agro, sed locus lucidior est. Frustissima res est haec limitatio;
Visum referre debet tabulas solas bases quae in eadem datorum conspectu sunt. Sententia non potest ad alias opiniones referre.
In terminis nostris, hoc significat munus non posse accedere ad aliud munus materialismum. Haec omnia doetrina caedit in germine.
Etiam haec limitatio (et infra in textu) usum casuum valde minuit;
Propositio SELECTA in definitione sententiae non debet continere elementa Transact-SQL sequentia:
CONIUNCTA EXTERA, CONIUGATIO, ORDINATIO AB ALIORUMQUE PROHIBITA. Potuit facilius definire quid posset, quam quod non posset. Elenchus multo brevior esset verisimile.
Summatim: ingens copia restrictionum in omni (nota commercii) DBMS nobis nulla (exceptis una logica, non technica) in technica LGPL. Animadvertendum tamen est hanc mechanismum in logica relationis exsecutione aliquanto difficiliorem esse quam in logica functione descripta.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
Quomodo facitur? PostgreSQL adhibetur ut "machina virtual". complexus est algorithmus intus qui queries aedificat. Hic fons. Heuristics cum fasciculo ifs non magna justo. Itaque si duos menses ad studium habes, architecturam experiri potes.
An efficaciter operatur? Admodum efficax. Infeliciter, hoc probare difficile est. Hoc tantum dicere possum, si milia quaestionum quae in magnis applicationibus existunt, tunc in mediocris efficaciores sunt quam bonae elit. Egregius programmator SQL aliquas interrogationes efficacius scribere potest, sed cum mille quaesitis causam simpliciter nec tempus illud faciendi non habebit. Restat ut nunc documenta efficaciae afferre possim quod plura incepta in suggestu in hoc DBMS constructo laborant. ERP systemataquae habent munera materialia diversa milia, cum millibus usorum et datorum terabytorum cum centena decies centena milia monumentorum currendo in servo duorum processus regularis. Sed quis inhibere/reprehendere efficaciam ex downloading suggestum ac PostgreSQL, comprehendo Logging SQL queries et quaerit logicam et datam ibi mutare.
In articulis sequentibus, etiam loqui quomodo potes restrictiones functionum, operari cum mutatione sessionum, et multo plura.