GitBucket
4.21.2
Toggle navigation
Snippets
Sign in
Files
Branches
12
Releases
Issues
Pull requests
Labels
Priorities
Milestones
Wiki
Forks
nigel.stanger
/
Publications
Browse code
• Squashed VLDB_2016.
DP_2017
First_Monday_2017
master
1 parent
0835821
commit
49e65a0daba73fb8540b0c39ca96236252e52b17
Nigel Stanger
authored
on 30 May 2017
Patch
Showing
4 changed files
VLDB_2016/.gitignore
VLDB_2016/VLDB2016_Stanger.bib
VLDB_2016/VLDB2016_Stanger.tex
VLDB_2016/vldb.cls
Ignore Space
Show notes
View
VLDB_2016/.gitignore
0 → 100644
*.pdf
Ignore Space
Show notes
View
VLDB_2016/VLDB2016_Stanger.bib
0 → 100644
@string{acj = {Australian Computer Journal}} @string{acmcsur = {ACM Computing Surveys}} @string{acmq = {ACM Queue}} @string{acmtocs = {ACM Transactions on Computing Systems}} @string{acmtods = {ACM Transactions on Database Systems}} @string{acmtois = {ACM Transactions on Information Systems}} @string{acmtoit = {ACM Transactions on Internet Technology}} @string{acmtosem = {ACM Transactions on Software Engineering and Methodology}} @string{acmtosn = {ACM Transactions on Sensor Networks}} @string{acmtweb = {ACM Transactions on the Web}} @string{adt = {Application Development Trends}} @string{ai = {Artificial Intelligence}} @string{ajis = {Australasian Journal of Information Systems}} @string{basist = {Bulletin of the American Society for Information Science and Technology}} @string{bit = {Behaviour {\&} Information Technology}} @string{byte = {B{YTE}}} @string{cacm = {Communications of the ACM}} @string{ccis = {Communications in Computer and Information Science}} @string{cj = {The Computer Journal}} @string{crpit = {Conferences in Research and Practice in Information Techology}} @string{database = {ACM SIGMIS Database}} @string{dbj = {Database Journal}} @string{dbms = {DBMS Magazine}} @string{dbpd = {Database Programming {\&} Design}} @string{ddj = {Dr. Dobb's Journal}} @string{develop = {{d}evelop, The Apple Technical Journal}} @string{directions = {Apple Directions}} @string{dke = {Data {\&} Knowledge Engineering}} @string{dlib = {D-Lib Magazine}} @string{ejis = {European Journal of Information Systems}} @string{fm = {First Monday}} @string{hbr = {Harvard Business Review}} @string{ibmjrd = {IBM Journal of Research and Development}} @string{ibmsj = {IBM Systems Journal}} @string{idt = {Internet Development Trends}} @string{ieeeahc = {IEEE Annals of the History of Computing}} @string{ieeec = {IEEE Computer}} @string{ieeedeb = {IEEE Data Engineering Bulletin}} @string{ieeeic = {IEEE Internet Computing}} @string{ieeeis = {IEEE Intelligent Systems}} @string{ieeepc = {IEEE Pervasive Computing}} @string{ieees = {IEEE Software}} @string{ieeesp = {IEEE Spectrum}} @string{ieeetnn = {IEEE Transactions on Neural Networks}} @string{ieeetse = {IEEE Transactions on Software Engineering}} @string{ijast = {International Journal of Applied Software Technology}} @string{ijcatr = {International Journal of Computer Applications Technology and Research}} @string{ijgis = {International Journal of Geographical Information Science}} @string{ijgisold = {International Journal of Geographical Information Systems}} @string{ijhcs = {International Journal of Human-Computer Studies}} @string{ijmms = {International Journal of Man-Machine Studies}} @string{ijseke = {International Journal of Software Engineering and Knowledge Engineering}} @string{ijswis = {International Journal on Semantic Web and Information Systems}} @string{ijwet = {International Journal of Web Engineering and Technology}} @string{ipm = {Information Processing and Management}} @string{is = {Information Systems}} @string{isedj = {Information Systems Education Journal}} @string{isj = {Information Systems Journal}} @string{ist = {Information and Software Technology}} @string{jacm = {Journal of the ACM}} @string{jasist = {Journal of the American Society for Information Science and Technology}} @string{jdim = {Journal of Digital Information Management}} @string{jdmm = {Journal of Digital Media Management}} @string{jiis = {Journal of Intelligent Information Systems}} @string{jlp = {Journal of Logic Programming}} @string{jodi = {Journal of Digital Information}} @string{jot = {Journal of Object Technology}} @string{jrpit = {Journal of Research and Practice in Information Technology}} @string{jss = {The Journal of Systems and Software}} @string{lncs = {Lecture Notes in Computer Science}} @string{misq = {MIS Quarterly}} @string{nzjc = {New Zealand Journal of Computing}} @string{nzjis = {New Zealand Journal of Information Systems}} @string{nzlimj = {New Zealand Library {\&} Information Management Journal}} @string{oracle = {Oracle Magazine}} @string{oss = {OCLC Systems {\&} Services: International Digital Library Perspectives}} @string{pcbi = {PLoS Computational Biology}} @string{pnas = {Proceedings of the National Academy of Sciences of the United States of America}} @string{pvldb = {Proceedings of the VLDB Endowment}} @string{sciam = {Scientific American}} @string{sej = {Software Engineering Journal}} @string{sigmetrics = {ACM SIGMETRICS Performance Evaluation Review}} @string{sigmod = {ACM SIGMOD Record}} @string{sigplan = {ACM SIGPLAN Notices}} @string{sigsoft = {ACM SIGSOFT Software Engineering Notes}} @string{spe = {Software---Practice and Experience}} @string{swj = {Semantic Web}} @string{tkde = {IEEE Transactions on Knowledge and Data Engineering}} @string{vldb = {The VLDB Journal}} @article{Bancilhon.F-1981a-Update, Author = {Fran{\c c}ois Bancilhon and Nicolas Spyratos}, Doi = {10.1145/319628.319634}, Journal = acmtods, Month = dec, Number = {4}, Pages = {557--575}, Title = {Update semantics of relational views}, Volume = {6}, Year = {1981}} @book{Batini.C-1992b-Conceptual, Address = {Redwood City, California, USA}, Booktitle = {Conceptual Database Design: An Entity-Relationship Approach}, Editor = {Carlo Batini and Stefano Ceri and Shamkant B. Navathe}, Isbn = {978-0-8053-0244-1}, Publisher = {Benjamin/Cummings}, Title = {Conceptual Database Design: An Entity-Relationship Approach}, Year = {1992}} @article{Chen.H-2011a-Survey, Author = {Haitao Chen and Husheng Liao}, Doi = {10.7763/IJCTE.2011.V3.278}, Journal = {International Journal of Computer Theory and Engineering}, Month = feb, Number = {1}, Pages = {1793--8201}, Title = {A survey to view update problem}, Url = {http://www.ijcte.org/papers/278-D038.pdf}, Volume = {3}, Year = {2011}} @article{Codd.E-1970a-Relational, Author = {Edgar F. Codd}, Doi = {10.1145/362384.362685}, Journal = cacm, Month = jun, Number = {6}, Pages = {377--387}, Title = {A relational model of data for large shared data banks}, Volume = {13}, Year = {1970}} @incollection{Codd.E-1972a-Completeness, Author = {Edgar F. Codd}, Crossref = {Rustin.R-1972a-Data}, Pages = {65--98}, Title = {Relational completeness of data base sublanguages}} @inproceedings{Codd.E-1974a-Recent, Author = {Edgar F. Codd}, Crossref = {Rosenfeld.J-1974a-IFIP}, Pages = {1017--1021}, Title = {Recent investigations in relational data base systems}} @article{Cosmadakis.S-1984a-Updates, Author = {Stavros S. Cosmadakis and Christos H. Papadimitriou}, Doi = {10.1145/1634.1887}, Journal = jacm, Month = sep, Number = {4}, Pages = {742--760}, Title = {Updates of relational views}, Volume = {31}, Year = {1984}} @book{Date.C-2013a-View, Author = {Chris J. Date}, Booktitle = {View Updating \{\&} Relational Theory: Solving the View Update Problem}, Date-Added = {2016-01-25 02:14:14 +0000}, Date-Modified = {2016-01-25 02:15:43 +0000}, Isbn = {9781449357849}, Publisher = {O'Reilly}, Series = {Theory in Practice}, Title = {View Updating {\&} Relational Theory: Solving the View Update Problem}, Year = {2013}} @book{Date.C-2012a-SQL-and-Relational, Author = {Chris J. Date}, Booktitle = {SQL and Relational Theory: How to Write Accurate SQL Code}, Date-Added = {2016-01-25 02:12:09 +0000}, Date-Modified = {2016-01-25 02:16:01 +0000}, Edition = {second}, Isbn = {9781449316402}, Publisher = {O'Reilly}, Series = {Theory in Practice}, Title = {SQL and Relational Theory: How to Write Accurate SQL Code}, Year = {2012}} @article{Dayal.U-1982a-Correct, Author = {Umeshwar Dayal and Philip A. Bernstein}, Doi = {10.1145/319732.319740}, Journal = acmtods, Month = sep, Number = {3}, Pages = {381--416}, Title = {On the correct translation of update operations on relational views}, Volume = {7}, Year = {1982}} @article{Gottlob.G-1988a-Properties, Author = {Georg Gottlob and Paolo Paolini and Roberto Zicari}, Doi = {10.1145/49346.50068}, Journal = acmtods, Month = dec, Number = {4}, Pages = {486--524}, Title = {Properties and update semantics of consistent views}, Volume = {13}, Year = {1988}} @article{Hegner.S-2004a-Order-based, Author = {Stephen J. Hegner}, Doi = {10.1023/A:1026158013113}, Journal = {Annals of Mathematics and Artificial Intelligence}, Month = jan, Number = {1--2}, Pages = {63--125}, Title = {An order-based theory of updates for closed database views}, Volume = {40}, Year = {2004}} @article{Hull.R-1986a-Relative, Author = {Richard Hull}, Journal = {SIAM Journal on Computing}, Month = aug, Number = {3}, Pages = {856--886}, Title = {Relative information capacity of simple relational database schemata}, Volume = {15}, Year = {1986}} @inproceedings{Keller.A-1985a-Algorithms, Author = {Arthur Michael Keller}, Crossref = {PODS-1985a-Proceedings}, Doi = {10.1145/325405.325423}, Pages = {154--163}, Title = {Algorithms for translating view updates to database updates for views involving selections, projections, and joins}} @article{Keller.A-1986a-Role, Author = {Arthur Michael Keller}, Doi = {10.1109/MC.1986.1663034}, Journal = ieeec, Month = jan, Number = {1}, Pages = {63--73}, Title = {The role of semantics in translating view updates}, Volume = {19}, Year = {1986}} @article{Keller.A-1987a-Comment, Author = {Arthur Michael Keller}, Doi = {10.1145/27629.214296}, Journal = acmtods, Month = sep, Number = {3}, Pages = {521--523}, Title = {Comments on {B}ancilhon and {S}pyratos' ``{U}pdate semantics and relational views''}, Volume = {12}, Year = {1987}} @inproceedings{Kotidis.Y-2006a-Updates, Annote = {Article 2.}, Author = {Yannis Kotidis and Divesh Srivastava and Yannis Velegrakis}, Crossref = {Liu.L-2006a-ICDE}, Doi = {10.1109/ICDE.2006.167}, Pages = {2}, Read = {1}, Title = {Updates through views: {A} new hope}} @article{Laurent.D-2001a-Monotonic, Author = {Dominique Laurent and Jens Lechtenb{\"o}rger and Nicolas Spyratos and Gottfried Vossen}, Doi = {10.1007/s007780100055}, Journal = vldb, Month = dec, Number = {4}, Pages = {295--315}, Title = {Monotonic complements for independent data warehouses}, Volume = {10}, Year = {2001}} @inproceedings{Lechtenborger.J-2003a-Impact, Author = {Jens Lechtenb{\"o}rger}, Crossref = {Neven.F-2003a-PODS}, Doi = {10.1145/773153.773159}, Pages = {49--55}, Title = {The impact of the constant complement approach towards view updating}} @article{Lechtenborger.J-2003a-Computation, Author = {Jens Lechtenb{\"o}rger and Gottfried Vossen}, Doi = {10.1145/777943.777946}, Journal = acmtods, Month = jun, Number = {2}, Pages = {175--208}, Title = {On the computation of relational view complements}, Volume = {28}, Year = {2003}} @inproceedings{Masunaga.Y-1984a-Relational, Author = {Yoshifumi Masunaga}, Crossref = {Dayal.U-1984a-VLDB}, Pages = {309--320}, Title = {A relational database view update translation mechanism}, Url = {http://www.vldb.org/conf/1984/P309.PDF}} @inproceedings{Miller.R-1993a-Information, Author = {Ren{\'e}e Jean Miller and Y. E. Ioannidis and Raghu Ramakrishnan}, Crossref = {Agrawal.R-1993a-VLDB}, Pages = {120--133}, Title = {The use of information capacity in schema integration and translation}, Url = {http://www.vldb.org/conf/1993/P120.PDF}} @phdthesis{Miller.R-1994a-PhD, Address = {Madison, Wisconsin, USA}, Author = {Miller, Ren{\'e}e Jean}, School = {University of Wisconsin-Madison}, Title = {Managing Structural Heterogeneity}, Type = {{PhD} thesis}, Url = {http://www.cs.toronto.edu/~miller/papers/dissertation.ps}, Year = {1994}} @techreport{Miller.R-1994a-SIG, Address = {Madison, Wisconsin, USA}, Author = {Ren{\'e}e Jean Miller and Y. E. Ioannidis and Raghu Ramakrishnan}, Institution = {Department of Computer Sciences, University of Wisconsin-Madison}, Month = jan, Number = {CS-TR-94-1185}, Title = {Schema intension graphs: {A} formal model for the study of schema equivalence}, Type = {Technical report}, Url = {http://www.cs.toronto.edu/~miller/papers/MIR93c.ps}, Year = {1994}} @article{Miller.R-1994a-Schema, Author = {Ren{\'e}e Jean Miller and Y. E. Ioannidis and Raghu Ramakrishnan}, Doi = {10.1016/0306-4379(94)90024-8}, Journal = is, Month = jan, Number = {1}, Pages = {3--31}, Title = {Schema equivalence in heterogeneous systems: {B}ridging theory and practice}, Url = {http://www.cs.toronto.edu/~miller/papers/MIR94b.ps}, Volume = {19}, Year = {1994}} @article{Shu.H-2000a-Using, Author = {Hua Shu}, Doi = {10.1023/A:1008726123320}, Journal = jiis, Month = sep, Number = {2}, Pages = {147--173}, Title = {Using constraint satisfaction for view update}, Volume = {15}, Year = {2000}} @techreport{Qian.X-1995a-Correct, Address = {Menlo Park, California, USA}, Author = {Xiaolei Qian}, Institution = {Computer Science Laboratory, SRI International}, Month = jul, Number = {SRI-CSL-95-08}, Title = {Correct schema transformations}, Type = {Technical report}, Url = {http://www.csl.sri.com/reports/postscript/sri-csl-95-08.ps.gz}, Year = {1995}} %% crossrefs @proceedings{Agrawal.R-1993a-VLDB, Address = {Dublin, Ireland}, Booktitle = {Proceedings of the Nineteenth International Conference on Very Large Data Bases (VLDB)}, Editor = {Rakesh Agrawal and Se{\'a}n Baker and David A. Bell}, Isbn = {978-1-55860-152-X}, Month = aug # {~24--27}, Publisher = {Morgan Kaufmann}, Title = {Proceedings of the Nineteenth International Conference on Very Large Data Bases (VLDB)}, Year = {1993}} @proceedings{Dayal.U-1984a-VLDB, Address = {Singapore}, Booktitle = {Proceedings of the Tenth International Conference on Very Large Data Bases (VLDB 1984)}, Editor = {Umeshwar Dayal and Gunter Schlageter and Lim Huat Seng}, Isbn = {0-934613-16-8}, Month = aug # {~27--31}, Publisher = {Morgan Kaufmann}, Title = {Proceedings of the Tenth International Conference on Very Large Data Bases (VLDB 1984)}, Year = {1984}} @proceedings{Liu.L-2006a-ICDE, Address = {Atlanta, Georgia, USA}, Booktitle = {Proceedings of the 22nd International Conference on Data Engineering (ICDE 2006)}, Editor = {Ling Liu and Andreas Reuter and Kyu-Young Whang and Jianjun Zhang}, Isbn = {0-7695-2570-9}, Month = {3--8~} # apr, Publisher = {IEEE Computer Society}, Title = {Proceedings of the 22nd International Conference on Data Engineering (ICDE 2006)}, Year = {2006}} @proceedings{Neven.F-2003a-PODS, Address = {San Diego, California, USA}, Booktitle = {Proceedings of the Twenty-Second ACM SIGMOD-SIGACT-SIGART Symposium on Principles of Database Systems (PODS 2003)}, Editor = {Frank Neven and Catriel Beeri and Tova Milo}, Isbn = {1-58113-670-6}, Month = jun # {~9--12}, Organization = {ACM}, Title = {Proceedings of the Twenty-Second ACM SIGMOD-SIGACT-SIGART Symposium on Principles of Database Systems (PODS 2003)}, Year = {2003}} @proceedings{PODS-1985a-Proceedings, Address = {Portland, Oregon, USA}, Booktitle = {Proceedings of the Fourth ACM SIGACT-SIGMOD Symposium on Principles of Database Systems (PODS '85)}, Isbn = {0-89791-153-9}, Month = mar # {~25--27}, Publisher = {ACM}, Title = {Proceedings of the Fourth ACM SIGACT-SIGMOD Symposium on Principles of Database Systems (PODS '85)}, Year = {1985}} @proceedings{Rosenfeld.J-1974a-IFIP, Address = {Stockholm, Sweden}, Booktitle = {Proceedings of the IFIP Congress '74 (Information Processing '74)}, Editor = {Jack L. Rosenfeld}, Isbn = {978-0-7204-2803-3}, Month = aug # {~5--10}, Publisher = {North-Holland}, Title = {Proceedings of the IFIP Congress '74 (Information Processing '74)}, Year = {1974}} @book{Rustin.R-1972a-Data, Address = {Englewood Cliffs, New Jersey, USA}, Booktitle = {Data Base Systems}, Editor = {Randall Rustin}, Publisher = {Prentice-Hall}, Series = {Courant Computer Science Symposia Series 6}, Title = {Data Base Systems}, Year = {1972}}
Ignore Space
Show notes
View
VLDB_2016/VLDB2016_Stanger.tex
0 → 100644
%% %% MAX 12 PAGES (all material) %% \documentclass{vldb} \usepackage{balance} \usepackage{relalg} \usepackage{txfonts} \usepackage{bm} \usepackage{subfigure} \usepackage{booktabs} \usepackage{tikz} \usetikzlibrary{positioning} \usetikzlibrary{graphs} \usetikzlibrary{decorations.pathreplacing} \usetikzlibrary{calc} \usetikzlibrary{arrows} % "empty" arrow tip \pgfarrowsdeclare{:}{:}{}{} % custom bar arrow tip, offset from end of line (use "empty" tip at line ends if no >) \tikzset{crossbar/.tip={|[scale width=1.75,sep=0.25em]}} % various edge styles for TikZ \tikzset{ function/.style={arrows={->}}, injection/.style={arrows={<-}}, total/.style={arrows={:{crossbar}-}}, surjection/.style={arrows={-{crossbar}:}}, bijection/.style={arrows={<{crossbar}-{crossbar}>}}, projection/.style={arrows={:{crossbar}-{crossbar}>}}, projection left/.style={arrows={:{crossbar}-{crossbar}>},edge label={\scriptsize\(\RelProject\)}}, projection right/.style={arrows={:{crossbar}-{crossbar}>},edge label'={\scriptsize\(\RelProject\)}}, selection left/.style={arrows={<-{crossbar}>},edge label={\scriptsize\(\RelRestrict\)}}, selection right/.style={arrows={<-{crossbar}>},edge label'={\scriptsize\(\RelRestrict\)}}, funcdep left/.style={arrows={->},edge node={node[sloped,midway,above] {\scriptsize\emph{key}}}}, funcdep right/.style={arrows={->},edge node={node[sloped,midway,below] {\scriptsize\emph{key}}}}, surtotal/.style={arrows={:{crossbar}-{crossbar}:}}, input keep/.style={blue,thick}, input delete/.style={blue!40,thick,dashed}, output/.style={red,thick}, output temp/.style={red,thick,dashed}, path 1/.style={green!60!black,thick}, path 2/.style={orange,thick} } % projection and selection edge annotations for TikZ \makeatletter \newcommand{\ProjectionAnnotation}[3][]{% \path (#2) to node[above,#1] {\scriptsize\(\RelProject\)} (#3);% } \newcommand{\SelectionAnnotation}[3][]{% \path (#2) to node[above,#1] {\scriptsize\(\RelRestrict\)} (#3);% } \makeatother \newcounter{constraint} % misc \newcommand{\todo}[1]{\textbf{!!TODO!!} {[#1]}} % commonly used elements \newcommand{\LS}{\ensuremath{\mathit{LS}}} \newcommand{\NLS}{\ensuremath{\mathit{NLS}}} \newcommand{\LSsub}{\ensuremath{\mathit{LS}_{\mathit{sub}}}} \newcommand{\NLSsub}{\ensuremath{\mathit{NLS}_{\mathit{sub}}}} \newcommand{\Sno}{\ensuremath{\mathit{Sno}}} \newcommand{\Sname}{\ensuremath{\mathit{Sname}}} \newcommand{\Status}{\ensuremath{\mathit{Status}}} \newcommand{\City}{\ensuremath{\mathit{City}}} \newcommand{\T}[1]{\ensuremath{T_{#1}}} \newcommand{\TT}[1]{\ensuremath{T_{\{#1\}}}} \newcommand{\CityLondon}{\ensuremath{\{\City\colon\mathit{'London'}\}}} \newcommand{\TCityMinusLondon}{\ensuremath{\T{\City} - \CityLondon}} \newcommand{\TSSC}{\ensuremath{\T{\Sname} \times \T{\Status} \times \T{\City}}} \newcommand{\TSSL}{\ensuremath{\T{\Sname} \times \T{\Status} \times \CityLondon}} \newcommand{\TSSNL}{\ensuremath{\T{\Sname} \times \T{\Status} \times (\TCityMinusLondon)}} \newcommand{\TLSPlusNLS}{\ensuremath{\T{\LS} + \T{\NLS}}} \newcommand{\TTLSPlusNLS}{\ensuremath{\TT{\LS} + \TT{\NLS}}} \newcommand{\TLSPlusNLSsub}{\ensuremath{\T{\LSsub} + \T{\NLSsub}}} \newcommand{\TTLSPlusNLSsub}{\ensuremath{\TT{\LSsub} + \TT{\NLSsub}}} \newcommand{\StackTLSPlusNLS}{\ensuremath{\begin{array}{c}\T{\LS}\,+ \\ \T{\NLS}\end{array}}} \newcommand{\StackTTLSPlusNLS}{\ensuremath{\begin{array}{c}\TT{\LS}\,+ \\ \TT{\NLS}\end{array}}} \newcommand{\StackTLSPlusNLSsub}{\ensuremath{\begin{array}{c}\T{\LSsub}\,+ \\ \T{\NLSsub}\end{array}}} \newcommand{\StackTTLSPlusNLSsub}{\ensuremath{\begin{array}{c}\TT{\LSsub}\,+ \\ \TT{\NLSsub}\end{array}}} \newcommand{\StackTSSC}{\ensuremath{\begin{array}{c}\T{\Sname}\,\times \\ \T{\Status} \times \T{\City}\end{array}}} \newcommand{\StackTSSL}{\ensuremath{\begin{array}{c}\T{\Sname} \times \T{\Status}\,\times \\ \CityLondon\end{array}}} \newcommand{\StackTSSNL}{\ensuremath{\begin{array}{c}\T{\Sname} \times \T{\Status}\,\times \\ (\TCityMinusLondon)\end{array}}} \newcommand{\StackTCityMinusLondon}{\ensuremath{\begin{array}{c}\T{\City}\,- \\ \CityLondon\end{array}}} \newcommand{\SC}[1]{\ensuremath{\mathcal{S}_{#1}}} % dominates \newcommand{\Dominates}[2]{\ensuremath{#2 \preceq #1}} \newcommand{\Equivalent}[2]{\ensuremath{#1 \equiv #2}} % SIG notation (in text) \newcommand{\Sedge}[1]{\ensuremath{\sigma_{\textrm{#1}}}} \newcommand{\SedgeP}[1]{\ensuremath{\sigma_{\textrm{#1}}^{'}}} \newcommand{\medmid}{\raise.125ex\hbox{\scalebox{1}[0.75]{$\mid$}}} % General SIG edges for use in formulas. % Adapted from: http://tex.stackexchange.com/questions/96330/adding-symbols-at-the-ends-of-a-horizontal-line \makeatletter \newlength{\@annotskipleft} \newlength{\@annotskipright} % #1 = left edge component % #2 = right edge component % #3 = left bar annotation % #4 = right bar annotation \newcommand\@sig@edge[4]{% \let\@middle\joinrel% \ifx#1\relbar% \@annotskipleft=.3em% % scrunch up the bare line so it's similar length to \long...arrow \ifx#2\relbar\def\@middle{\joinrel\joinrel\relbar\joinrel\joinrel}\fi% \else% % arrows need a little more clearance \@annotskipleft=.4em% \fi% \ifx#2\relbar\@annotskipright=.3em\else\@annotskipright=.4em\fi% \mathrel{\ooalign{$#1\@middle#2$\cr\hskip\@annotskipleft$#3$\hfil$#4$\hskip\@annotskipright\cr}}% } % 0 = nothing % 1 = bar % 2 = arrowhead % 3 = both \def\@sigedge#1#2{% \ifcase\numexpr#1*4+#2\relax% \@sig@edge{\relbar}{\relbar}{}{}\or % 00 = ----- \@sig@edge{\relbar}{\relbar}{}{\medmid}\or % 01 = ---+- \@sig@edge{\relbar}{\rightarrow}{}{}\or % 02 = ----> \@sig@edge{\relbar}{\rightarrow}{}{\medmid}\or % 03 = ---+> \@sig@edge{\relbar}{\relbar}{\medmid}{}\or % 10 = -+--- \@sig@edge{\relbar}{\relbar}{\medmid}{\medmid}\or % 11 = -+-+- \@sig@edge{\relbar}{\rightarrow}{\medmid}{}\or % 12 = -+--> \@sig@edge{\relbar}{\rightarrow}{\medmid}{\medmid}\or % 13 = -+-+> \@sig@edge{\leftarrow}{\relbar}{}{}\or % 20 = <---- \@sig@edge{\leftarrow}{\relbar}{}{\medmid}\or % 21 = <--+- \@sig@edge{\leftarrow}{\rightarrow}{}{}\or % 22 = <---> \@sig@edge{\leftarrow}{\rightarrow}{}{\medmid}\or % 23 = <--+> \@sig@edge{\leftarrow}{\relbar}{\medmid}{}\or % 30 = <+--- \@sig@edge{\leftarrow}{\relbar}{\medmid}{\medmid}\or % 31 = <+-+- \@sig@edge{\leftarrow}{\rightarrow}{\medmid}{}\or % 32 = <+--> \@sig@edge{\leftarrow}{\rightarrow}{\medmid}{\medmid} % 33 = <+-+> \fi% } \newcommand{\sigedge}[1]{\ensuremath{\@sigedge#1}} \makeatother \newcommand{\Edge}{\sigedge{00}} \newcommand{\Total}{\sigedge{10}} \newcommand{\Surjective}{\sigedge{01}} \newcommand{\SurTotal}{\sigedge{11}} \newcommand{\Functional}{\sigedge{02}} \newcommand{\Injective}{\sigedge{20}} \newcommand{\Bijective}{\sigedge{33}} % Hack to get the overset symbols to appear at the right height. % \smash removes the spacing around the operator, hence \mathop. \newcommand{\LabelledEdge}[2]{\mathop{\overset{\raisebox{0.3em}{\scriptsize\ensuremath{#2}}}{\smash[t]{#1}}}} \newcommand{\ProjectionEdge}{\LabelledEdge{\sigedge{13}}{\RelProject}} \newcommand{\SelectionEdge}{\LabelledEdge{\sigedge{23}}{\RelRestrict}} \newcommand{\TrivialProjection}{\ensuremath{\LabelledEdge{\Bijective}{\RelProject}}} \newcommand{\TrivialSelection}{\ensuremath{\LabelledEdge{\Bijective}{\RelRestrict}}} \newcommand{\KeyEdge}{\ensuremath{\LabelledEdge{\Functional}{\mathit{key}}}} \hyphenation{co-pied sche-ma} \pagestyle{empty} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document} \title{Characterising relational view updates using relative information capacity} \numberofauthors{1} \author{ \alignauthor Nigel Stanger \\ \affaddr{Department of Information Science}\\ \affaddr{University of Otago}\\ \affaddr{Dunedin, New Zealand}\\ \email{nigel.stanger@otago.ac.nz} } \maketitle %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{abstract} In 2012, Chris Date published a book about the view update problem in the context of the Relational Model. He presented several detailed examples of different varieties of view updates and characterised their behaviour, in the process deriving a set of principles for updating views based around the notion of \emph{information equivalence} of view schemas. In this paper we examine how this notion can be more formally characterised using Hull's concept of \emph{relative information capacity}. Specifically, we use Miller's \emph{schema intension graph} formalism to characterise the information equivalence of Date's restriction view example, and show that this supports his operational definition of information equivalence. \end{abstract} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Introduction} \noindent The view update problem is a well known and long standing problem of great practical significance in the database field. Indeed, Date \cite{Date.C-2013a-View} likens it to significant unsolved problems in other fields such as the Riemann Hypothesis in mathematics or ``\(P = \mathit{NP}\)?'' in computational complexity theory. In his 2012 book \cite{Date.C-2013a-View} Date developed a comprehensive set of principles for updating relational views, based on the notion of \emph{information equivalence}. However, that notion was defined more operationally than by a formal theoretical definition. View updating can be considered a special case of schema translation: we effectively have one schema comprising a set of views and another schema comprising a set of base relations, and need to translate updates from one schema to the other.\footnote{These schemas may be actually separate, or more likely may be sub-schemas of a larger database schema, with effective separation achieved via the access privilege mechanism.} It therefore makes sense that formalisms developed to assist with characterising sche\-ma translations would also be applicable to view updates. To that end, we propose to use Hull's notion of \emph{relative information capacity} \cite{Hull.R-1986a-Relative} as a means to characterise the equivalence of the schemas involved in a given view configuration. In particular, we will use Miller's \emph{schema intension graph} (SIG) formalism, which facilitates the comparison of relative information capacity across schemas. In this paper, we show how SIGs can be used to characterise the equivalence of schemas within a view configuration. To facilitate this, we extend the SIG formalism with additional concepts, including relation and tuple types, key constraints and functional dependencies. We also show how the formalism can be practically used to characterise the information equivalence of a view configuration, by applying it to Date's example of disjoint restriction views \cite{Date.C-2013a-View}. The results our formal analysis are shown to be consistent with Date's operational analysis of information equivalence in this example. In Section~\ref{sec-view-update-problem}, we briefly review the view update problem and relevant research, and in Section~\ref{sec-relations-types} we introduce some core concepts that are used throughout the remainder of the paper. In Section~\ref{sec-info-capacity} we provide a detailed explanation of relative information capacity and the SIG formalism, then explain in Section~\ref{sec-relational-sigs} how to construct a SIG that represents a relational schema. In Section~\ref{sec-characterising} we analyse Date's restriction view example \cite{Date.C-2013a-View} in detail, and characterise the information capacity of the various sub-schemas involved. We discuss conclusions and future work in Section~\ref{sec-conclusion}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{The view update problem} \label{sec-view-update-problem} \noindent The view update problem was first discussed by Codd in 1974 \cite{Codd.E-1974a-Recent}. When an update operation is applied to a view, that update needs to be translated into corresponding updates on the base relations from which the view is derived \cite{Keller.A-1985a-Algorithms}. Sometimes this translation is clear, but sometimes there are multiple such translations that all produce the desired view update, but produce different---possibly incompatible---changes in the base relations. Worse, there may be translations that have side effects (e.g., for some views based on joins), which produce a different result in the view than what we would expect if we could apply the update to the view directly \cite{Keller.A-1985a-Algorithms}. The problem then is how to choose the most appropriate translation. As yet there has been no solution that completely and automatically resolves this ambiguity. There has been considerable research into this problem over the last four decades, and numerous different approaches have been suggested. We shall now briefly review some key developments in the relational context. % Paolini? Banchilhon and Spyratos proposed the concept of \emph{constant complement} \cite{Bancilhon.F-1981a-Update} as a way to resolve view update issues. The \emph{complement} of a view describes all the information from the original database that is not in the view, so composing a view with its complement provides enough information to reconstruct the original database. Keeping the complement invariant under view update facilitates translation construction. This is a useful approach that has been developed further by other authors \cite{Hegner.S-2004a-Order-based,Lechtenborger.J-2003a-Impact}, but it has been shown that reasonable translations exist that cannot be carried out under constant complement \cite{Keller.A-1987a-Comment}. Computing the complement of a given view is also difficult, and several authors have worked on computing complements more efficiently \cite{Cosmadakis.S-1984a-Updates,Laurent.D-2001a-Monotonic,Lechtenborger.J-2003a-Computation}. Finally, this approach is purely structural in nature and does not consider the semantics of the schema, which is necessary to properly resolve translation ambiguity \cite{Keller.A-1986a-Role}. Gottlob et al.\ generalised the idea of constant complement into the class of \emph{consistent views} \cite{Gottlob.G-1988a-Properties}. They define consistent views as having the property that ``if the effect of a view update on a view state is determined, then the effect of the corresponding database update is unambiguously determined'' \cite{Gottlob.G-1988a-Properties}. However, there are still reasonable views that are not consistent under this definition, and this approach again does not consider schema semantics. % not sure this is really needed? %Keller nicely illustrated the view update problem in terms of mappings between database states \cite{Keller.A-1985a-Algorithms}, as shown in Figure~\ref{fig-equivalence}. A view \(V(\mathit{DB})\) is derived via a view mapping \(V\) from the original database \(\mathit{DB}\). When an update \(U\) is applied to \(V(\mathit{DB})\), a view translator \(T\) translates it into an update \(T(U)\) on \(\mathit{DB}\), resulting in a new database state \(\mathit{DB}'\). The new view state \(V(\mathit{DB}')\) is then derived. Problems arise if \(V(\mathit{DB}')\) does not match what we would expect if \(U\) were applied directly to \(V(\mathit{DB})\), because of side effects introduced by \(T\). Ideally, we would be able to find a side effect free translator \(T\) for any given view, but there are some views that cannot be translated without side effects (e.g. certain joins) \cite{Keller.A-1985a-Algorithms}. % Date \cite{Date.C-2013a-View} notes that this arises from a lack of \emph{information equivalence} between \(\mathit{DB}\) and \(V(\mathit{DB})\). %%%%%%%%%%%%%%%%%%%% %\newcommand{\qeq}{\ensuremath{\mathop{\smash[t]{\overset{?}{=}}}}} % %\begin{figure} % \centering % \begin{tikzpicture}[every edge/.style={draw,semithick}] % \node (vdb) {\(V(\mathit{DB})\)}; % \node (db) [below=11mm of vdb] {\(\mathit{DB}\vphantom{(')}\)}; % % \node (vdbp) [right=3cm of vdb] {\(V(\mathit{DB}')\)}; % \node (uvdb) [left=-1mm of vdbp] {\(U(V(\mathit{DB})) \qeq\)}; % % \node (dbp) at (db -| vdbp) {\(\mathit{DB}\smash[t]{'}\vphantom{()}\)}; % \node (tudb) [left=-1mm of dbp] {\(T(U)(\mathit{DB}) =\)}; % % \graph{ % { (db), (dbp) } -> [edge label={\(V\)},swap] { (vdb), (vdbp) }; % % (vdb) -> [edge node={node (u) [above=-0.6mm] {\(U\)}}] (uvdb); % (db) -> [edge node={node (tu) [above=-0.6mm] {\(T(U)\)}}] (tudb); % % (u) -> [double equal sign distance=2pt,-implies] (tu); % }; % \end{tikzpicture} % \caption{Equivalence of view updates \protect\cite{Keller.A-1985a-Algorithms}.} % \label{fig-equivalence} %\end{figure} %%%%%%%%%%%%%%%%%%%% Keller noted that semantic information is essential in order to choose an appropriate translation \cite{Keller.A-1986a-Role}, and suggested this could be collected at view definition time from the database administrator (DBA) \cite{Keller.A-1985a-Algorithms}. Masunaga argued, however, that this would be insufficient to completely resolve ambiguity, and suggested collecting further semantic information from end users at update time \cite{Masunaga.Y-1984a-Relational}. Shu \cite{Shu.H-2000a-Using} discussed an interesting approach to this kind of information gathering, by treating the problem of generating suitable view translations as a constraint satisfaction problem. This enables constraints to be added incrementally at view update time. However, while collecting such information from the DBA seems reasonable, collecting it from the end user at update time could be seen as too burdensome, and could impact the usability of query interfaces. It is also unclear which information needs to be captured, and how best to capture it. Kotidis et al.\ \cite{Kotidis.Y-2006a-Updates} discussed a different approach to avoiding side effects in view translations. They proposed creating a materialised copy of the view that could be updated directly, rather than mapping updates from the (virtual) view to the base tables. Clearly this approach enables the view to updated without translation side effects, but does imply that the physical manifestation of the view may no longer match the original view query (i.e., its extension may not match its intension). Finally, Date has published several books on the theoretical underpinnings of the Relational Model over the last decade, including one specifically targeting the view update problem \cite{Date.C-2013a-View} (indeed, the book is subtitled ``Solving the View Update Problem''). He developed a comprehensive set of rules for updating views in a relational context, supported by a wide array of worked examples. Date advocated explicitly stating all relevant constraints at view creation time, which is similar to the information gathering approaches discussed above \cite{Keller.A-1985a-Algorithms,Masunaga.Y-1984a-Relational,Shu.H-2000a-Using}. He argued that if a complete set of constraints was available, then ambiguity would be diminished or eliminated, and it would be possible to automatically generate a set of appropriate \emph{compensatory rules} to automatically manage the view update process. Compensatory rules are similar in principle to database triggers, except that they are intended to be declarative so that their definitions can made explicitly visible to end users. Date's work is interesting and compelling, and raises several questions worthy of further investigation. However, there are still some situations where the correct view translation may be ambiguous, e.g., views based on certain types of join, as previously noted by Keller \cite{Keller.A-1985a-Algorithms}. Somewhat disappointingly, Date took a pragmatic approach in these cases, effectively saying ``this feels like the correct solution''. His justification was well argued and logical, but it still falls somewhat short of the ideal of a fully automated solution. As noted previously, Date characterises the ability to define an appropriate and effective view translation using the notion of \emph{information equivalence}. Two schemas \(\SC{1}\) and \(\SC{2}\) are said to be information equivalent ``if and only if the constraints that apply to [\(\SC{1}\)] and [\(\SC{2}\)] are such that every proposition that can be represented by [\(\SC{1}\)] can be represented by [\(\SC{2}\)] and vice versa'' \cite{Date.C-2013a-View}. While information equivalence is clearly a formal concept, the definition and characterisation in \cite{Date.C-2013a-View} are more operational and pragmatic in nature. This is what we explore further in this paper. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Relations and types} \label{sec-relations-types} \noindent We generally follow Date's \cite{Date.C-2012a-SQL-and-Relational} notation and terminology regarding the Relational Model. The main exception is that we do not use Tutorial D notation Date uses in his examples, preferring instead a more classical algebraic style notation. In this paper, \(A\) represents an attribute (comprising a name:type pair), \(R\) represents a relation variable (\emph{relvar}), and \(v\) represents a value (of an attribute, tuple, relation, etc.). In the following discussion it will generally be clear which attribute a value is associated with, but where necessary, the value will be prefixed with the attribute name, i.e., \(\mathit{name}\colon\mathit{value}\). Date defines a \emph{type} \(\T{i}\) as ``essentially a \emph{named, finite set of values}'' \cite{Date.C-2012a-SQL-and-Relational}, representing every possible value of some specific kind, e.g., every possible ASCII character string of length 5, every possible city name, every possible relation value with a particular heading, etc. That is: \begin{equation}\label{eqn-type} \T{i} = \{v_{1}, v_{2}, \dotsc, v_{m}\}, 0 < m < k \end{equation} where \(k\) is some finite upper bound. Thus, the type of an attribute \(A_{i}\) (denoted \(\T{A_{i}}\)) is by definition the set of all possible values of \(A_{i}\). Consider a relvar \(R\) with heading \(\{A_{1}, A_{2}, \dotsc, A_{n}\}\). Following from equation~\ref{eqn-type}, the (relation) type of \(R\), denoted here as \(\T{R}\), is the set of all possible relation values with \(R\)'s heading. Similarly, the (tuple) type of \(R\)'s tuples, denoted here as \TT{R}, is the set of all possible tuple values with \(R\)'s heading, which equates to the cartesian product of \(R\)'s attribute types, i.e.: \begin{equation}\label{eqn-tuple-type} \TT{R} = \T{A_{1}} \times \T{A_{2}} \times\dotsb\times \T{A_{n}}\text{.} \end{equation} By definition any given value of \(R\) must comprise a subset (possibly empty) of tuples \(\{t_{1}, t_{2}, \dotsc, t_{m}\} \subseteq \TT{R}\). \(\T{R}\) therefore represents every possible \(k\)-combination of the elements of \TT{R}, for \(0 \le k \le \left|\TT{R}\right|\). For example, Date's usual suppliers-and-parts schema \cite{Date.C-2013a-View} includes a relvar \(S\!\) with heading \(\{\Sno, \Sname, \Status, \City\}\), which contains details of suppliers. As per equation~\ref{eqn-tuple-type}, the tuples of \(S\!\) have type \(\TT{S} = \T{\Sno} \times \TSSC\). This notion of type as a set of possible values is synonymous with Codd's original definition of domains in the Relational Model \cite{Codd.E-1970a-Relational,Date.C-2012a-SQL-and-Relational}, and in particular with the notion of domains as ``sets of values'' in schema intension graphs \cite{Miller.R-1994a-Schema,Miller.R-1994a-SIG}. The implications of the latter point will be explored further in Section~\ref{sec-relational-sigs}, after we have discussed the concepts of relative information capacity and schema intension graphs in Section~\ref{sec-info-capacity}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Nulls} \noindent We also follow Date in assuming that nulls are not permitted in relation values. Philosophical objections aside, however, this makes little practical difference to the approach discussed in this paper, as we are dealing exclusively with types rather than attributes. That is, an attribute can be null, but it makes little sense to say that a \emph{type} can be ``null''. It could be claimed that a type ``includes'' nulls, but it is unclear what this would even mean in practice, and runs the risk of treating nulls like ``normal'' values rather than the special markers that they actually are. In any case, this would effectively be no different from the situation without nulls, so we omit further consideration of nulls in the interest of clarity. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newpage \section{Relative information capacity} \label{sec-info-capacity} \noindent A schema conveys information about the phenomenon that it models. Hull \cite{Hull.R-1986a-Relative} defined the concept of \emph{relative information capacity} to describe the information content of different schemas. The relative information capacity of a schema determines the set of all valid instances of that schema \cite{Hull.R-1986a-Relative,Miller.R-1994a-PhD,Miller.R-1993a-Information}. Relative information capacity, as its name implies, is not a quantitative measure; rather it is an indicator of the relative information content of different schemas. Relative information capacity can be used as a basis for identifying the differences between schema instances, and can therefore be used as an aid to schema integration and translation \cite{Miller.R-1994a-PhD}. As noted earlier, view updating is a special case of this, so it follows that information capacity can also be used to characterise view updates, or more precisely, to characterise the information content of views compared to the base relvar(s) from which they are derived. Miller et al.\ \cite{Miller.R-1993a-Information} defined relative information capacity in terms of two types of mapping. An \emph{information (capacity) preserving mapping} from schema \(\SC{1}\) to schema \(\SC{2}\) maps every element of \(\SC{1}\) to an element of \(\SC{2}\), but only some elements of \(\SC{2}\) to elements of \(\SC{1}\). \(\SC{2}\) has an information capacity greater than \(\SC{1}\), and is said to \emph{dominate} \(\SC{1}\), denoted \Dominates{\SC{2}}{\SC{1}}. Compare this to an \emph{equivalence preserving mapping} from \(\SC{1}\) to \(\SC{3}\), which maps every element of \(\SC{1}\) to an element \(\SC{3}\) and vice versa (i.e., both the mapping and its inverse are information preserving). The information capacities of \(\SC{1}\) and \(\SC{3}\) are identical, and the schemas are said to be \emph{equivalent}, denoted \Equivalent{\SC{1}}{\SC{3}}. (Note that Miller et al.\ \cite{Miller.R-1994a-Schema} use stricter definitions of equivalence and dominance than those used here; strictly speaking, the discussion of equivalence and dominance in this section should properly refer to \emph{absolute} dominance and equivalence, whereas the following discussion on SIG transformations should properly refer to \emph{internal} dominance and equivalence \cite{Miller.R-1994a-Schema}. The distinction, however, is not crucial to the discussion in this paper.) Since relative information capacity is a relative measure, it can only be effectively used in a comparative manner. To this end, Miller et al.\ \cite{Miller.R-1994a-SIG} defined the \emph{schema intension graph} formalism to provide a tool for comparing the information capacity of schemas. A schema intension graph (SIG) describes the associations between domains in a schema, and provides a way to ``reason about constraints on \emph{collections of entities} in an instance of the entity set, rather than about the internal structure of a single entity'' \cite{Miller.R-1994a-SIG}. In particular, SIGs provide a useful abstract formalism within which to perform schema transformations, as transforming the SIG for a schema is effectively the same as transforming the schema itself. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Constructing SIGs} \label{sec-sig-build} \noindent A SIG is a graph \(G = (N, E)\) \cite{Miller.R-1994a-Schema}. The nodes \(n_{i} \in N\) represent typed domains (i.e., sets of values). Nodes may be \emph{simple} (atomic) or \emph{constructed} (composite). Simple nodes are denoted by the name of the domain that they represent. Constructed nodes represent a collection of domains and are built using the \(\times\) (cartesian product) and \(+\) (union) operators. The edges \(e_{i} \in E\) represent binary relations (in the mathematical sense) between domains. Edges are denoted by plain lines with an optional label, and may be composed to form a \emph{path} between two nodes (the notation \(e_{2} \circ e_{1}\) means ``edge \(e_{1}\) followed by edge \(e_{2}\)''). Some edges may be designated as \emph{selection} edges, labelled \(\RelRestrict\), or \emph{projection} edges, labelled \(\RelProject\). These correspond to the relational algebra operators of the same name \cite{Codd.E-1972a-Completeness}. Edges may also be annotated with up to four properties denoting simple constraints on the binary relation represented by the edge: totality, surjectivity, functionality and injectivity. These properties are defined as follows \cite{Miller.R-1994a-Schema}: \begin{quotation} \noindent Let \(A\) and \(B\) be two sets. A binary relation \(r : A - B\) is \emph{total} (denoted \(e : A \Total B\)) if it is defined for all elements of \(A\); \emph{surjective} (\(e : A \Surjective B\)) if it is defined for all elements of \(B\); \emph{functional} (\(e : A \Functional B\)) if an element of \(A\) determines at most one element of \(B\); and \emph{injective} (\(e : A \Injective B\)) if an element of \(B\) determines at most one element of \(A\). \end{quotation} Note that the correct usage of these properties is determined by the direction in which the binary relation is read. That is, the binary relation \(A \Functional B\) is functional if read from left to right, but injective if read from right to left. A \emph{bijection} is a binary relation that has all four properties \cite{Miller.R-1994a-SIG}. Essentially, \(A \Total B\)) means that every element of \(A\) (conversely, \(B\) for \(A \Surjective B\)) must participate in the binary relation, while \(A \Functional B\) means that a given element of \(A\) (conversely, \(B\) for \(A \Injective B\)) may appear in at most one instance of the binary relation. Note that use of the term ``relation'' here, while mathematically correct, clearly has potential to cause confusion in any discussion that also involves the Relational Model. From now on, we shall therefore refer to the binary relations represented by SIG edges as ``associations''. A selection edge \(e : A \LabelledEdge{\sigedge{00}}{\RelRestrict} B\) indicates that the elements of \(B\) comprise a subset (or specialisation) of the elements of \(A\). If \(B = A\), which we term a \emph{trivial} selection, every element of B must appear in A and vice versa. Similarly, every element of \(A\) can be associated with at most one element of \(B\), and vice versa. Trivial selection edges are therefore bijective, i.e., \(A \LabelledEdge{\Bijective}{\RelRestrict} B\). If \(B \subset A\), which we term a \emph{non-trivial} selection, every element of \(B\) must appear in \(A\), but the converse no longer holds. The mapping remains one-to-one, as before. Non-trivial selection edges are therefore surjective (from the perspective of the supertype), functional, and injective, i.e., \(A \SelectionEdge B\). A projection edge \(e : A \LabelledEdge{\sigedge{00}}{\RelProject} B\), indicates that the elements of \(B\) are a projection of \(A\). This implies that \(A\) is a constructed node of the form \(B \times C \times \dotsb\). Trivial projection edges (\(B = A\)) are bijective, i.e., \(A \LabelledEdge{\Bijective}{\RelProject} B\), for the same reasons as trivial selection edges. For non-trivial projections (i.e., \(B \ne A\)), every element of \(A\) must have a corresponding element in \(B\), and vice versa. Similarly, every element of \(A\) can be associated with at most one element of \(B\), but \emph{not} vice versa. Thus, non-trivial projection edges are total, surjective, and functional, i.e., \(A \ProjectionEdge B\).\footnote{Allowing nulls could potentially alter which of these properties apply, but all non-trivial projection edges would still share the same properties regardless.} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Comparing SIGs} \label{sec-sig-compare} \noindent It is possible to determine the relationship between the relative information capacities of two schemas by comparing SIGs for the two schemas. Consider two schemas \(\SC{1}\) and \(\SC{2}\), with corresponding SIGs \(G_{\SC{1}}\) and \(G_{\SC{2}}\). Intuitively, if \(G_{\SC{1}}\) and \(G_{\SC{2}}\) are isomorphic, then \(\SC{1}\) and \(\SC{2}\) are equivalent \cite{Miller.R-1994a-SIG}. An isomorphism occurs between two SIGs when the graphs match both structurally and semantically. That is, \(G_{\SC{1}}\) and \(G_{\SC{2}}\) must be more than just structurally identical---the semantics of the SIG nodes and edges must also be compatible. Miller et al.\ \cite{Miller.R-1994a-SIG} identify three possible results from comparing two SIGs \(G_{\SC{1}}\) and \(G_{\SC{2}}\): \begin{enumerate} \item \(G_{\SC{1}}\) and \(G_{\SC{2}}\) are either immediately isomorphic, or one can be manipulated by a series of equivalence preserving transformations (described below) until it is isomorphic to the other. The two schemas are equivalent (i.e., \(\SC{1} \equiv \SC{2}\)). \item \(G_{\SC{1}}\) and \(G_{\SC{2}}\) are not immediately isomorphic, but one can be manipulated by a series of information capacity augmenting transformations (described below) until it is isomorphic to the other. The transformed schema is dominated by the other (i.e., either \(\Dominates{\SC{2}}{\SC{1}}\) or \(\Dominates{\SC{1}}{\SC{2}}\)). \item \(G_{\SC{1}}\) and \(G_{\SC{2}}\) are not immediately isomorphic and cannot be transformed to be isomorphic. The information capacities of \(\SC{1}\) and \(\SC{2}\) cannot be compared. \end{enumerate} Batini et al.\ \cite{Batini.C-1992b-Conceptual} follow a similar classification scheme with respect to schema transformations: they refer to the first as \emph{information-preserving} transformations, the second as \emph{augmenting} transformations and the third as \emph{noncomparable} transformations. Miller et al.\ \cite{Miller.R-1994a-Schema} describe the following equivalence preserving and information capacity augmenting transformations on SIGs, which are summarised in Table~\ref{Tab.Viewpoints.SIGTransformations}: \begin{description} \item[Annotation transformations] allow the removal of annotations, or projection and selection constraints from edges (e.g., \(n_{1} \sigedge{23} n_{2} \Rightarrow n_{1} \sigedge{02} n_{2}\)). If we can transform \(\SC{1}\) into \(\SC{2}\) by such a transformation, then the information capacity of \(\SC{2}\) dominates that of \(\SC{1}\) (i.e., \Dominates{\SC{2}}{\SC{1}}). \item[Composition transformations] allow edges to be moved and copied around the graph. Consider an edge \(e\) between nodes \(n_{1}\) and \(n_{2}\), as shown in Figure~\ref{fig-sig-composition-original}. If there is a path \(P = e_{m} \circ \dotsb \circ e_{k}\) of functional edges from some other node \(n_{k}\) to \(n_{2}\) (i.e., \(n_{k} \Functional \dotsb \Functional n_{2}\)), \(e\) may be copied to a new edge \(e'\) between nodes \(n_{1}\) and \(n_{k}\) as shown in Figure~\ref{fig-sig-composition-copy}. The original \(e\) can then be deleted if desired, effectively moving \(e\) to \(e'\) as shown in Figure~\ref{fig-sig-composition-move}. The annotation of \(e'\) is determined by the composition of the edges of \(P\!\). If an edge with a particular annotation (such as surjectivity) is composed with an edge without that annotation, the resulting edge does not have the annotation. For example, the composition of the edges \(\Functional\) and \(\Surjective\) would be an edge with no annotations (\(\Edge\)), whereas the composition of \(\Functional\) and \(\sigedge{03}\) would be \(\Functional\). If we can transform \(\SC{1}\) into \(\SC{2}\) by such a transformation, then \Dominates{\SC{2}}{\SC{1}}. %%%%%%%%%%%%%%%%%%%% \begin{table}[tb] \centering \small \begin{tabular}{lcc} \toprule & & \textbf{Effect on infor-} \\ \textbf{Transformation} & \textbf{Type} & \textbf{mation capacity} \\ \midrule Delete annotation or \(\RelProject\)/\(\RelRestrict\) constraint & annotation & augmented \\ Move/copy edge & composition & augmented \\ Create/delete duplicate node & selection & no change \\ Create trivial selection edge & selection & no change \\ Delete trivial selection edge & selection & augmented \\ \bottomrule \end{tabular} \caption{Summary of SIG transformations.} \label{Tab.Viewpoints.SIGTransformations} \end{table} %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% \begin{figure}[htb] \centering \subfigure[Original state\label{fig-sig-composition-original}]{ \begin{tikzpicture} \node (n1) {\(n_{1}\)}; \node (n2) [below=1cm of n1] {\(n_{2}\)}; \node (n3) [right=1cm of n2] {\(n_{3}\)}; \node (ee) [right=0.75cm of n3] {\ldots}; \node (nk) [right=0.75cm of ee] {\(n_{k}\)}; \graph{ (n1) -- [edge label={\(e\)},swap] (n2); (nk) -> [edge label={\(e_{k}\)}] (ee) -> [edge label={\(e_{m+1}\)}] (n3) -> [edge label={\(e_{m}\)}] (n2); }; \node (Pleft) [above=2mm of n2.north east] {}; \node (Pright) [above=2mm of nk.north west] {}; \node (P) at ($(Pleft)!0.5!(Pright)$) {\(P\)}; \draw[decorate,decoration=brace] (n2.north east) -- (nk.north west); \end{tikzpicture} } \subfigure[Copy edge \(e\) to \(e'\)\label{fig-sig-composition-copy}]{ \begin{tikzpicture} \node (n1) {\(n_{1}\)}; \node (n2) [below=1cm of n1] {\(n_{2}\)}; \node (n3) [right=1cm of n2] {\(n_{3}\)}; \node (ee) [right=0.75cm of n3] {\ldots}; \node (nk) [right=0.75cm of ee] {\(n_{k}\)}; \graph{ (n1) -- [edge label={\(e\)},swap] (n2); (n1) -- [edge label={\(e'\)}] (nk); (nk) -> [edge label={\(e_{k}\)}] (ee) -> [edge label={\(e_{m+1}\)}] (n3) -> [edge label={\(e_{m}\)}] (n2); }; \end{tikzpicture} } \subfigure[Move edge \(e\) to \(e'\)\label{fig-sig-composition-move}]{ \begin{tikzpicture} \node (n1) {\(n_{1}\)}; \node (n2) [below=1cm of n1] {\(n_{2}\)}; \node (n3) [right=1cm of n2] {\(n_{3}\)}; \node (ee) [right=0.75cm of n3] {\ldots}; \node (nk) [right=0.75cm of ee] {\(n_{k}\)}; \graph{ (n1) -- [edge label={\(e'\)}] (nk); (nk) -> [edge label={\(e_{k}\)}] (ee) -> [edge label={\(e_{m+1}\)}] (n3) -> [edge label={\(e_{m}\)}] (n2); }; \end{tikzpicture} } \caption{Composition transformations.} \label{fig-sig-composition} \end{figure} %%%%%%%%%%%%%%%%%%%% \item[Selection transformations] allow the creation and deletion of new nodes and edges as follows: \begin{enumerate} \item An existing node \(n\) may be duplicated to create a new node \(n'\!\). A trivial selection edge \(e:n \LabelledEdge{\Bijective}{\RelRestrict} n'\) is added to enforce the restriction that \(n'\) is a duplicate of \(n\). \item A node \(n_{1}\) may be deleted if it is attached to exactly one other node \(n_{2}\) by a single trivial selection edge \(e:n_{1} \LabelledEdge{\Bijective}{\RelRestrict} n_{2}\) (implying \(n_{1}\) is a duplicate of \(n_{2}\)). This also implies deleting the attached trivial selection edge. \item A trivial selection edge \(e:n \LabelledEdge{\Bijective}{\RelRestrict} n\) may be created that connects a node \(n\) to itself. \item A trivial selection edge \(e:n_{1} \LabelledEdge{\Bijective}{\RelRestrict} n_{2}\) may be deleted, removing the association between \(n_{1}\) and \(n_{2}\). \end{enumerate} If we can transform \(\SC{1}\) into \(\SC{2}\) using any of the first three selection transformations, then \Equivalent{\SC{2}}{\SC{1}}. If we can transform \(\SC{1}\) into \(\SC{2}\) using the fourth selection transformation, then \Dominates{\SC{2}}{\SC{1}}. The latter seems somewhat counter-intuitive \cite{Qian.X-1995a-Correct}, but is nonetheless correct \cite{Miller.R-1994a-Schema}. This is because a trivial selection edge \(e:n_{1} \LabelledEdge{\Bijective}{\RelRestrict} n_{2}\) denotes that \(n_{1}\) and \(n_{2}\) correspond to the same domain, so removing the edge also removes this constraint. \end{description} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Relational schemas as SIGs} \label{sec-relational-sigs} \noindent The direct correspondence between relational types and SIG domains (as noted in Section~\ref{sec-relations-types}) enables us to use SIGs to represent the structure and constraints of relational schemas. Equating tuple types to the cartesian product of their attributes (equation \ref{eqn-tuple-type}) means that these can also be mapped directly to a constructed SIG node. Let us again consider the relvar \(S\{\Sno, \Sname, \Status, \City\}\) from Date's suppliers-and-parts schema. In addition to type constraints on the attributes, tuples, and the relvar as a whole, \(S\!\) is subject to a (primary) key constraint on \Sno. Taken together with the collection of types \(\T{\Sno}\), \(\T{\Sname}\), \(\T{\Status}\), \(\T{\City}\), \(\TT{S}\), and \(\T{S}\), we can construct the corresponding SIG shown in Figure~\ref{fig-sig-s-alone} as explained below (assuming that \(S\!\) is the only relvar in the schema). As noted in Section~\ref{sec-relations-types}, any given value of \(S\!\) must comprise a subset of \(\TT{S}\), so the association between \(\T{S}\) and \(\TT{S}\) is total. Similarly, every tuple in \(\TT{S}\) must appear in at least one value of \(S\!\), so the association is also surjective. The association is neither functional nor injective, however, as a value of \(S\!\) in general may contain multiple tuples, and each tuple in \(\TT{S}\) appears in multiple values of \(S\!\). This gives us \(\T{S}\SurTotal\TT{S}\). The key constraint on \Sno\ implies that the functional dependency \(\{\Sno\} \rightarrow \{\Sname, \Status, \City\}\) holds in \(S\!\). From equation \ref{eqn-tuple-type}, we can infer the type of \(\{\Sname, \Status, \City\}\) as \(\TSSC\). The association is functional and not injective by definition. As not every supplier number may appear in any given value of \(S\!\), there may be elements of \(\T{\Sno}\) that are not associated with an element of \(\TSSC\), and vice versa. This implies that the association is neither total nor surjective. This gives us \(\T{\Sno} \KeyEdge \TSSC\) (we introduce the label \(\mathit{key}\) to indicate that this edge represents a key constraint). Both \(\T{\Sno}\) and \(\TSSC\) are projections of \(\TT{S}\), so we can add (non-trivial) projection edges \(\TT{S} \ProjectionEdge \T{\Sname} \times \T{\Status} \times T_{\City}\) and \(\TT{S} \ProjectionEdge \T{\Sno}\). Similarly, \(\T{\Sname}\), \(\T{\Status}\), and \(\T{\City}\) are each projections of \(\TSSC\), so we can add further projection edges to these nodes, as shown in Figure~\ref{fig-sig-s-alone}. %%%%%%%%%%%%%%%%%%%% \begin{figure}[htb] \centering \begin{tikzpicture}[level distance=12mm] \node (TS) {\(\T{S}\)}; \node (TTS) [right=1cm of TS] {\(\TT{S}\)} [sibling distance=3cm] child[arrows={:{crossbar}-{crossbar}>}] {node (TSno) {\(\T{\Sno}\)}} child[arrows={:{crossbar}-{crossbar}>}] {node (TSSC) {\(\TSSC\)} [sibling distance=15mm] child[arrows={:{crossbar}-{crossbar}>}] {node (TSname) {\(\T{\Sname}\)}} child[arrows={:{crossbar}-{crossbar}>}] {node (TStatus) {\(\T{\Status}\)}} child[arrows={:{crossbar}-{crossbar}>}] {node (TCity) {\(\T{\City}\)}}}; % TS to T{S} \draw[arrows={:{crossbar}-{crossbar}:}] (TS) to (TTS); % FD \draw[arrows={->}] (TSno) to node[below=-2pt] {\scriptsize\emph{key}} (TSSC); % projection edges \ProjectionAnnotation[above left=-2pt and -4pt]{TTS}{TSno} \ProjectionAnnotation[above right=-2pt and -4pt]{TTS}{TSSC} \ProjectionAnnotation[above left=-2pt and -4pt]{TSSC}{TSname} \ProjectionAnnotation[right=-2pt]{TSSC}{TStatus} \ProjectionAnnotation[above right=-2pt and -4pt]{TSSC}{TCity} \end{tikzpicture} \caption{SIG for relvar \(\bm{S\{\Sno, \Sname, \Status, \City\}}\).} \label{fig-sig-s-alone} \end{figure} %%%%%%%%%%%%%%%%%%%% Looking at Figure~\ref{fig-sig-s-alone}, it could be argued that the \(T_{\dots}\) type notation is redundant and unnecessarily complicates the diagram. Why not just use, e.g., \(S\!\) instead of \(\T{S}\), \(\Sno\) instead of \(\T{\Sno}\), and \(\Sno \times \Sname \times \Status \times \City\) instead of \(\TT{S}\)? It is important to remember, however, that SIGs like that shown in Figure~\ref{fig-sig-s-alone} include multiple elements of quite different kinds, including relations, tuples, and various combinations of attributes. Discarding the type notation might be reasonable in informal situations, but could lead to confusion between the different kinds of elements represented. The explicit type notation protects the semantics of the various elements of the schema and makes it clear what is being considered. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Characterising view updates} \label{sec-characterising} \noindent In this section we show how SIGs can be used to characterise the information equivalence of view updates, using Date's motivating example of restriction views \cite{Date.C-2013a-View}. Views and the base relvars they are derived from normally exist within the same ``base'' database schema (although this is not strictly required), which we shall refer to as \(\SC{0}\). However, an end user may be granted access only to the views, and thus not be aware of the existence of the base relvar(s), or vice versa. This effectively partitions the schema into sub-schemas \(\SC{1}, \SC{2}, \dotsc, \SC{n}\). There are explicit and implicit constraints in \(\SC{0}\) that should also apply to the sub-schemas. Ignoring these constraints in a sub-schema \(\SC{k}\) will affect its information capacity, and could negatively impact the information equivalence of view updates involving \(\SC{k}\). In the next section we will show how such constraints can be propagated into sub-schemas by rewriting them in terms of the sub-schema alone, which enables us to explicitly incorporate into the sub-schema the type information implicit in \(\SC{0}\) that would otherwise be omitted. We will then discuss the construction of SIGs for Date's restriction view example (Section~\ref{sec-date-sigs}), and show how to transform and compare these (Section~\ref{sec-transforming}). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Constraint derivation and propagation} \label{sec-constraints} \noindent Date's motivating example in Chapter 4 of \cite{Date.C-2013a-View} explores what is arguably the simplest case of view updating: disjoint restriction views. The example includes a base relvar \(S\!\) and two views \(\LS\) and \(\NLS\) derived\footnote{Although as Date notes \cite{Date.C-2013a-View}, we could just as easily define \(\LS\) and \(\NLS\) as base relvars and then derive \(S = \LS \RelUnion \NLS\), or even define all three as base relvars. The constraints will remain the same regardless.} from \(S\!\): \begin{eqnarray} \LS & = & \RelRestrict_{\City = \mathit{'London'}}S \label{eqn-ls} \\ \NLS & = & \RelRestrict_{\City \ne \mathit{'London'}}S \label{eqn-nls} \end{eqnarray} Informally, \LS\ contains details of London suppliers, while \NLS\ contains details of non-London suppliers. \(\LS\) and \(\NLS\) represent disjoint restrictions of \(S\!\) with the same heading. They have the following tuple types: \begin{eqnarray} \TT{\LS} & = & \T{\Sno} \times \T{\Sname} \times \T{\LS} \times \CityLondon \nonumber \\ \TT{\NLS} & = & \T{\Sno} \times \T{\Sname} \times \T{\Status} \times (\TCityMinusLondon) \nonumber \end{eqnarray} The base schema for this example is \(\SC{0} = \{S, \LS, \NLS\}\). This is subject to type constraints as specified by the various types noted previously, and the following additional constraints: \begin{list}{\textbf{C\(\bm{_{\arabic{constraint}}}\):}}{\usecounter{constraint}} \item\label{constraint-key} \Sno\ is a key for each of \(S\!\), \LS, and \NLS, therefore the functional dependency \(\{\Sno\} \rightarrow \{\Sname, \Status, \City\}\) also holds in each of (a) \(S\!\), (b) \(\LS\), and (c) \(\NLS\). % not sure how relevant the FK constraints are? % how to represent? FK is a subset of the original key, so selection edge between S.Sno and each of LS.Sno and NLS.Sno % or perhaps a selection edge from Sno to itself? (labelled FK) % Notation: \T{\Sno}, \T{\LS.\Sno}, \T{\NLS.\Sno}? \item\label{constraint-lsfk} \(\RelProject_{\{\Sno\}}\LS \subseteq \RelProject_{\{\Sno\}}S\) [foreign key from \(\LS\) to \(S\!\)] \item\label{constraint-nlsfk} \(\RelProject_{\{\Sno\}}\NLS \subseteq \RelProject_{\{\Sno\}}S\) [foreign key from \(\NLS\) to \(S\!\)] \item\label{constraint-union} \(S = \LS \RelUnion \NLS\) [from (\ref{eqn-ls}) and (\ref{eqn-nls}) above] \item\label{constraint-disjoint} \(\LS \RelIntersect \NLS = \emptyset\) [\LS\ and \NLS\ are disjoint] \item\label{constraint-notlondon} \(\RelRestrict_{\City \ne \mathit{'London'}}\LS = \emptyset\) [from (\ref{eqn-ls}) above] \item\label{constraint-london} \(\RelRestrict_{\City = \mathit{'London'}}\NLS = \emptyset\) [from (\ref{eqn-nls}) above] \item\label{constraint-relation-type-union} (a) \(\T{S} = \T{\LS} \RelUnion \T{\NLS}\); (b) \(\TT{S} = \TT{\LS} \RelUnion \TT{\NLS}\) [from C\(_{\ref{constraint-union}}\)] \item\label{constraint-relation-types} (a) \(\T{\LS} \subset \T{S}\); (b) \(\TT{\LS} \subset \TT{S}\) [from (\ref{eqn-ls}) above] \item\label{constraint-tuple-types} (a) \(\T{\NLS} \subset \T{S}\); (b) \(\TT{\NLS} \subset \TT{S}\) [from (\ref{eqn-nls}) above] \item\label{constraint-implied-types-london} \(\CityLondon \subset \T{\City}\) \item\label{constraint-implied-types-nonlondon} \((\TCityMinusLondon) \subset \T{\City}\) \item\label{constraint-implied-types-TSSL} \(\TSSL \subset \TSSC\) \item\label{constraint-implied-types-TSSNL} \(\TSSNL \subset \TSSC\) \end{list} Constraints C\(_{\ref{constraint-union}}\)--C\(_{\ref{constraint-london}}\) enforce that \(\LS\) and \(\NLS\) are disjoint restrictions of \(S\!\), while C\(_{\ref{constraint-relation-type-union}}\)--C\(_{\ref{constraint-implied-types-TSSNL}}\) are additional type constraints that specify specialisation associations implied by the subtypes and supertypes occurring in \(\SC{0}\). In most typical database schemas, only constraints C\(_{\ref{constraint-key}}\), C\(_{\ref{constraint-lsfk}}\), and C\(_{\ref{constraint-nlsfk}}\) will be explicitly specified. Some database schemas may also explicitly specify constraints C\(_{\ref{constraint-union}}\) and C\(_{\ref{constraint-disjoint}}\), but it is more likely that these and all the remaining constraints will be implicit in the definition of \(\SC{0}\). It is important for the purposes of this analysis to clearly identify all such implicit constraints, so that nothing is missed when constructing corresponding SIGs. Let us partition \(\SC{0}\) into three sub-schemas: \(\SC{1} = \{S\}\), \(\SC{2} = \{\LS, \NLS\}\), and \(\SC{3} = \{LS\}\). We wish to compare the relative information capacities of the schema pairs \((\SC{1}, \SC{2})\) and \((\SC{1}, \SC{3})\), in order to determine whether the schemas in each pair are information equivalent. This will in turn characterise the view update compatibility of the two schemas. Note that in the following analysis, we omit the foreign key constraints C\(_{\ref{constraint-lsfk}}\) and C\(_{\ref{constraint-nlsfk}}\), as we have yet to determine the best way to represent inclusion dependencies of this nature in a SIG, or indeed whether such dependencies are significant. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Schema \(\SC{1}\)} \label{sec-constraints-s-i} \noindent A user granted access only to \(\SC{1}\) sees only relvar \(S\!\). Constraint C\(_{\ref{constraint-key}}\)(a) can be propagated directly into \(\SC{1}\) because it is expressed only in terms of \(S\!\). Constraints C\(_{\ref{constraint-implied-types-london}}\)--C\(_{\ref{constraint-implied-types-TSSNL}}\) do not mention any relvars and can thus also be directly propagated into \(\SC{1}\). Constraints C\(_{\ref{constraint-union}}\)--C\(_{\ref{constraint-tuple-types}}\) can be propagated to \(\SC{1}\) by rewriting them only in terms of \(S\!\). We can do this by substituting the definitions of \(\LS\) (equation~\ref{eqn-ls}) and \(\NLS\) (equation~\ref{eqn-nls}) into the constraints. For brevity, we shall denote these substitutions as \(\LSsub\) and \(\NLSsub\), so as to distinguish them from the actual \(\LS\) and \(\NLS\) relvars in \(\SC{0}\), \(\SC{2}\), and \(\SC{3}\). The superscript ``1'' in the following denotes that these constraints have been rewritten in \(\SC{1}\): \begin{list}{\textbf{C\(\bm{_{\arabic{constraint}}^{1}}\):}}{\usecounter{constraint}\setcounter{constraint}{3}} \item \(S = \LSsub \RelUnion \NLSsub\) (or even just \(S = S\)) \item \(\LSsub \RelIntersect \NLSsub = \emptyset\) \item \(\RelRestrict_{\City \ne \mathit{'London'}}\LSsub = \emptyset\) \item \(\RelRestrict_{\City = \mathit{'London'}}\NLSsub = \emptyset\) \item (a) \(\T{S} = \T{\LSsub} \RelUnion \T{\NLSsub}\); (b) \(\TT{S} = \TT{\LSsub} \RelUnion \TT{\NLSsub}\) (or even just \(\T{S} = \T{S}\) and \(\TT{S} = \TT{S}\)) \item (a) \(\T{\LSsub} \subset \T{S}\); (b) \(\TT{\LSsub} \subset \TT{S}\) [from (\ref{eqn-ls}) above] \item (a) \(\T{\NLSsub} \subset \T{S}\); (b) \(\TT{\NLSsub} \subset \TT{S}\) [from (\ref{eqn-nls}) above] \end{list} We can also rewrite C\(_{\ref{constraint-key}}\)(b) and C\(_{\ref{constraint-key}}\)(c) to C\(_{\ref{constraint-key}}^{1}\)(b) and C\(_{\ref{constraint-key}}^{1}\)(c), so that the functional dependency applies to \(\LSsub\) and \(\NLSsub\) instead of \(\LS\) and \(\NLS\). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Schema \(\SC{2}\)} \label{sec-constraints-s-ii} \noindent A user granted access only to \(\SC{2}\) sees only relvars \(\LS\) and \(\NLS\). Constraints C\(_{\ref{constraint-key}}\)(b), C\(_{\ref{constraint-key}}\)(c), and C\(_{\ref{constraint-disjoint}}\)--C\(_{\ref{constraint-london}}\) can be directly propagated into \(\SC{2}\) as they are defined only in terms of \(\LS\) and \(\NLS\). C\(_{\ref{constraint-implied-types-london}}\)--C\(_{\ref{constraint-implied-types-TSSNL}}\) can be directly propagated into \(\SC{2}\) as they do not mention any relvars. C\(_{\ref{constraint-union}}\), C\(_{\ref{constraint-relation-type-union}}\), C\(_{\ref{constraint-relation-types}}\), and C\(_{\ref{constraint-tuple-types}}\) can be rewritten only in terms of \(\LS\) and \(\NLS\): \begin{list}{\textbf{C\(\bm{_{\arabic{constraint}}^{2}}\):}}{\usecounter{constraint}\setcounter{constraint}{3}} \item \(\LS \RelUnion \NLS = \LS \RelUnion \NLS\)\setcounter{constraint}{7} \item (a) \(\T{\LS} \RelUnion \T{\NLS} = \T{\LS} \RelUnion \T{\NLS}\); (b) \(\TT{\LS} \RelUnion \TT{\NLS} = \TT{\LS} \RelUnion \TT{\NLS}\) \item (a) \(\T{\LS} \subset (\T{\LS} \RelUnion \T{\NLS})\); (b) \(\TT{\LS} \subset (\TT{\LS} \RelUnion \TT{\NLS})\) \item (a) \(\T{\NLS} \subset \T{S}\); (b) \(\TT{\NLS} \subset \TT{S}\) \end{list} We can also rewrite C\(_{\ref{constraint-key}}\)(a) to C\(_{\ref{constraint-key}}^{2}\)(a), so that the functional dependency applies to \(\LS \RelUnion \NLS\) instead of \(S\!\). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Schema \(\SC{3}\)} \label{sec-constraints-s-iii} \noindent A user granted access only to \(\SC{3}\) sees only relvar \(\LS\). Constraints C\(_{\ref{constraint-key}}\)(b) and C\(_{\ref{constraint-notlondon}}\) can be directly propagated into \(\SC{3}\) as they are defined only in terms of \(\LS\). C\(_{\ref{constraint-implied-types-london}}\)--C\(_{\ref{constraint-implied-types-TSSNL}}\) can also be directly propagated as previously discussed. The remaining constraints cannot be rewritten only in terms of \(\LS\), and therefore cannot be propagated to \(\SC{3}\). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newpage \subsection{Constructing the SIGs} \label{sec-date-sigs} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Schema \(\SC{1}\)} \label{sec-sigs-s-i} \noindent The SIG for \(\SC{1}\) will not just be that for relvar \(S\!\) (see Figure~\ref{fig-sig-s-alone}), as that schema did not incorporate the constraints implicit in \(\SC{0}\). The process for constructing the SIG will be similar to that for the earlier example, however. The constraints appearing in \(\SC{1}\) are C\(_{\ref{constraint-key}}^{1}\), C\(_{\ref{constraint-union}}^{1}\)--C\(_{\ref{constraint-tuple-types}}^{1}\), and C\(_{\ref{constraint-implied-types-london}}\)--C\(_{\ref{constraint-implied-types-TSSNL}}\). The SIG will include all of the edges that appear in Figure~\ref{fig-sig-s-alone}. \(\T{S} \SurTotal \TT{S}\) implies \(\T{\LSsub} \SurTotal \TT{\LSsub}\) and \(\T{\NLSsub} \SurTotal \TT{\NLSsub}\). Constraints C\(_{\ref{constraint-implied-types-london}}\)--C\(_{\ref{constraint-implied-types-TSSNL}}\) imply the existence of several subtype nodes, plus corresponding selection and projection edges: \begin{itemize} \item \(\TT{\LSsub} \ProjectionEdge \T{\Sno}\) and \(\TT{\NLSsub} \ProjectionEdge \T{\Sno}\) \item \(\TT{\LSsub} \ProjectionEdge \TSSL\) \item \(\TT{\NLSsub} \ProjectionEdge \TSSNL\) \item \(\TSSL \ProjectionEdge \T{\Sname}\) \item \(\TSSL \ProjectionEdge \T{\Status}\) \item \(\TSSL \ProjectionEdge\,\CityLondon\) \item \(\TSSNL \ProjectionEdge \T{\Sname}\) \item \(\TSSNL \ProjectionEdge \T{\Status}\) \item \(\TSSNL \ProjectionEdge \T{\City} -\) \newline \(\CityLondon\) \end{itemize} C\(_{\ref{constraint-key}}^{1}\)(b) and C\(_{\ref{constraint-key}}^{1}\)(c) imply two additional key edges: \begin{itemize} \item \(\T{\Sno} \KeyEdge \TSSL\) \item \(\T{\Sno} \KeyEdge \TSSNL\) \end{itemize} C\(_{\ref{constraint-relation-type-union}}^{1}\)(a) implies node \(\TLSPlusNLSsub\) to represent \(\T{\LSsub} \RelUnion \T{\NLSsub}\). However, this node would be effectively identical to \(\T{S}\!\), so we can ignore C\(_{\ref{constraint-relation-type-union}}^{1}\)(a) and just continue to use \(\T{S}\!\). A similar argument applies for C\(_{\ref{constraint-relation-type-union}}^{1}\)(b) and \(\TT{S}\). C\(_{\ref{constraint-relation-types}}^{1}\)--C\(_{\ref{constraint-implied-types-TSSNL}}^{1}\) imply the following selection edges: \begin{itemize} \item \(\T{S} \SelectionEdge \T{\LSsub}\) and \(\TT{S} \SelectionEdge \TT{\LSsub}\) \item \(\T{S} \SelectionEdge \T{\NLSsub}\) and \(\TT{S} \SelectionEdge \TT{\NLSsub}\) \item \(\T{\City} \SelectionEdge\,\CityLondon\) \item \(\T{\City} \SelectionEdge\,(\TCityMinusLondon)\) \item \(\TSSC \SelectionEdge\) \(\TSSL\) \item \(\TSSC \SelectionEdge \T{\Sname} \times \T{\Status} \times \T{\City} -\) \newline \(\CityLondon\) \end{itemize} The complete SIG for \(\SC{1}\) is shown in Figure~\ref{fig-sig-s}. %%%%%%%%%%%%%%%%%%%% \begin{figure*} \centering \begin{tikzpicture} \matrix[row sep=0.5cm] { \node (TLS) {\(\T{\LSsub}\)}; &[7mm] \node (TTLS) {\(\TT{\LSsub}\)}; &[7mm] &[4mm] &[-4mm] \node (TSSL) {\(\StackTSSL\)}; & & \node (LSCity) {\(\CityLondon\)}; \\ & & & \node (TSname) {\(\T{\Sname}\)}; \\ \node (TLSPlusNLS) {\(\T{S}\)}; & \node (TTLSPlusNLS) {\(\TT{S}\)}; & \node (TSno) {\(\T{\Sno}\)}; & & \node (TSSC) {\(\StackTSSC\)}; & & \node (TCity) {\(\T{City}\)}; \\ & & & & & \node (TStatus) {\(\T{\Status}\)}; \\ \node (TNLS) {\(\T{\NLSsub}\)}; & \node (TTNLS) {\(\TT{\NLSsub}\)}; & & & \node (TSSNL) {\(\StackTSSNL\)}; & & \node (NLSCity) {\(\StackTCityMinusLondon\)}; \\ }; \graph{ % relation types to tuple types { [edges=surtotal] { (TLS), (TNLS), (TLSPlusNLS) } -- { (TTLS), (TTNLS), (TTLSPlusNLS) }, }; % FDs (TSno) -- [funcdep left,bend left] (TSSL); (TSno) -- [funcdep right] (TSSNL); % projection edges { [edges=projection left] (TTLSPlusNLS) -- (TSno), (TTLS) -- { (TSno), (TSSL) }, (TSSL) -- { (TStatus), (LSCity) }, }; { [edges=projection right] (TTNLS) -- { (TSno), (TSSNL) }, (TSSC) -- { (TSname), (TStatus) }, (TSSL) -- (TSname), (TSSNL) -- { (TStatus), (NLSCity), (TSname) }, }; % selection edges { [edges=selection left] { (TLSPlusNLS), (TTLSPlusNLS) } -- { (TLS), (TTLS) }, (TSSC) -- { (TSSL), (TSSNL) }, (TCity) -- (NLSCity), }; { [edges=selection right] { (TLSPlusNLS), (TTLSPlusNLS) } -- { (TNLS), (TTNLS) }, (TCity) -- (LSCity), }; % insert "gaps" into crossed edges { [edges={white,line width=1.5mm}] (TSno) -- (TSSC), (TSSC) -- (TCity), (TTLSPlusNLS) -- [bend right] (TSSC), }; (TSno) -- [funcdep right] (TSSC); (TSSC) -- [projection left] (TCity); (TTLSPlusNLS) -- [projection right,bend right] (TSSC), }; \end{tikzpicture} \caption{SIG for schema \(\bm{\SC{1} = \{S\}}\).} \label{fig-sig-s} \end{figure*} %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Schema \(\SC{2}\)} \label{sec-sigs-s-ii} \noindent The constraints appearing in \(\SC{2}\) are C\(_{\ref{constraint-key}}^{2}\), C\(_{\ref{constraint-union}}^{2}\), C\(_{\ref{constraint-disjoint}}\)--C\(_{\ref{constraint-london}}\), C\(_{\ref{constraint-relation-type-union}}^{2}\)--C\(_{\ref{constraint-tuple-types}}^{2}\), and C\(_{\ref{constraint-implied-types-london}}\)--C\(_{\ref{constraint-implied-types-TSSNL}}\). This is the same set of constraints, albeit with different rewritings, as \(\SC{1}\). This means that the SIG for \(\SC{2}\) can be built in essentially the same manner as for \(\SC{1}\), with some nodes differently named. In particular, C\(_{\ref{constraint-relation-type-union}}\) implies that there will be nodes \(\TLSPlusNLS\) and \(\TTLSPlusNLS\) instead of \(\T{S}\) and \(\TT{S}\). There will also be \(\T{\LS}\) instead of \(\T{\LSsub}\), etc. The complete SIG for \(\SC{2}\) is shown in Figure~\ref{fig-sig-ls-nls}. %%%%%%%%%%%%%%%%%%%% \begin{figure*} \centering \begin{tikzpicture} \matrix[row sep=0.5cm] { \node (TLS) {\(\T{\LS}\)}; &[7mm] \node (TTLS) {\(\TT{\LS}\)}; &[7mm] &[4mm] &[-4mm] \node (TSSL) {\(\StackTSSL\)}; & & \node (LSCity) {\(\CityLondon\)}; \\ & & & \node (TSname) {\(\T{\Sname}\)}; \\ \node (TLSPlusNLS) {\(\StackTLSPlusNLS\)}; & \node (TTLSPlusNLS) {\(\StackTTLSPlusNLS\)}; & \node (TSno) {\(\T{\Sno}\)}; & & \node (TSSC) {\(\StackTSSC\)}; & & \node (TCity) {\(\T{City}\)}; \\ & & & & & \node (TStatus) {\(\T{\Status}\)}; \\ \node (TNLS) {\(\T{\NLS}\)}; & \node (TTNLS) {\(\TT{\NLS}\)}; & & & \node (TSSNL) {\(\StackTSSNL\)}; & & \node (NLSCity) {\(\StackTCityMinusLondon\)}; \\ }; \graph{ % relation types to tuple types { [edges=surtotal] { (TLS), (TNLS), (TLSPlusNLS) } -- { (TTLS), (TTNLS), (TTLSPlusNLS) }, }; % FDs (TSno) -- [funcdep left,bend left] (TSSL); (TSno) -- [funcdep right] (TSSNL); % projection edges { [edges=projection left] (TTLSPlusNLS) -- (TSno), (TTLS) -- { (TSno), (TSSL) }, (TSSL) -- { (TStatus), (LSCity) }, }; { [edges=projection right] (TTNLS) -- { (TSno), (TSSNL) }, (TSSC) -- { (TSname), (TStatus) }, (TSSL) -- (TSname), (TSSNL) -- { (TStatus), (NLSCity), (TSname) }, }; % selection edges { [edges=selection left] { (TLSPlusNLS), (TTLSPlusNLS) } -- { (TLS), (TTLS) }, (TSSC) -- { (TSSL), (TSSNL) }, (TCity) -- (NLSCity), }; { [edges=selection right] { (TLSPlusNLS), (TTLSPlusNLS) } -- { (TNLS), (TTNLS) }, (TCity) -- (LSCity), }; % insert "gaps" into crossed edges { [edges={white,line width=1.5mm}] (TSno) -- (TSSC), (TSSC) -- (TCity), (TTLSPlusNLS) -- [bend right] (TSSC), }; (TSno) -- [funcdep right] (TSSC); (TSSC) -- [projection left] (TCity); (TTLSPlusNLS) -- [projection right,bend right] (TSSC), }; \end{tikzpicture} \caption{SIG for schema \(\bm{\SC{2} = \{\LS, \NLS\}}\).} \label{fig-sig-ls-nls} \end{figure*} %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Schema \(\SC{3}\)} \label{sec-sigs-s-iii} \noindent The constraints appearing in \(\SC{3}\) are C\(_{\ref{constraint-key}}\)(b), C\(_{\ref{constraint-notlondon}}\), and C\(_{\ref{constraint-implied-types-london}}\)--C\(_{\ref{constraint-implied-types-TSSNL}}\). The SIG will only include edges and nodes that relate either directly to \(\LS\) or are independent of any relvar, such as the subtype node \(\TSSNL\). The complete SIG for \(\SC{3}\) is shown in Figure~\ref{fig-sig-ls}. %%%%%%%%%%%%%%%%%%%% \begin{figure*} \centering \begin{tikzpicture} \matrix[row sep=0.5cm] { \node (TLS) {\(\T{\LS}\)}; &[7.5mm] \node (TTLS) {\(\TT{\LS}\)}; &[7mm] &[4mm] &[-4mm] \node (TSSL) {\(\StackTSSL\)}; & & \node (LSCity) {\(\CityLondon\)}; \\ & & & \node (TSname) {\(\T{\Sname}\)}; \\ & & \node (TSno) {\(\T{\Sno}\)}; & & \node (TSSC) {\(\StackTSSC\)}; & & \node (TCity) {\(\T{City}\)}; \\ & & & & & \node (TStatus) {\(\T{\Status}\)}; \\ & & & & \node (TSSNL) {\(\StackTSSNL\)}; & & \node (NLSCity) {\(\StackTCityMinusLondon\)}; \\ }; \graph{ % relation types to tuple types { [edges=surtotal] (TLS) -- (TTLS), }; % projection edges { [edges=projection left] (TTLS) -- { (TSno), (TSSL) }, (TSSL) -- { (TStatus), (LSCity) }, }; { [edges=projection right] (TSSC) -- { (TSname), (TStatus) }, (TSSL) -- (TSname), (TSSNL) -- { (TStatus), (NLSCity), (TSname) }, }; % selection edges { [edges=selection left] (TSSC) -- { (TSSL), (TSSNL) }, (TCity) -- (NLSCity), }; { [edges=selection right] (TCity) -- (LSCity), }; % insert "gaps" into crossed edges { [edges={white,line width=1.5mm}] (TSno) -- (TSSC), (TSSC) -- (TCity), }; (TSno) -- [funcdep right] (TSSC); (TSSC) -- [projection left] (TCity); }; \end{tikzpicture} \caption{SIG for schema \(\bm{\SC{3} = \{\LS\}}\).} \label{fig-sig-ls} \end{figure*} %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Transforming the SIGs} \label{sec-transforming} \noindent Now that we have constructed SIGs for all three schemas, we can compare the relative information capacities of the schema pairs \((\SC{1}, \SC{2})\) and \((\SC{1}, \SC{3})\). We do this by attempting to transform the SIG for one of the schemas until it is isomorphic with the other. Looking at the SIGs for \(\SC{1}\) and \(\SC{2}\), we can see immediately that both SIGs have the same node and edge structure; indeed the only difference is in the names of some of the nodes. However, we already know from the discussion in Sections~\ref{sec-constraints-s-i} and~\ref{sec-constraints-s-ii} that these differently-named nodes represent the same domains. We therefore have an immediate isomorphism between the two SIGs and can conclude that the information capacities of \(\SC{1}\) and \(\SC{2}\) are identical, i.e., \(\Equivalent{\SC{1}}{\SC{2}}\). The comparison between \(\SC{1}\) and \(\SC{3}\) is more interesting. There are some shared structures, but the two SIGs are clearly different. Since the SIG transformations discussed in Section~\ref{sec-sig-compare} only ever preserve or enhance information capacity, intuitively we should attempt to transform the ``smaller'' SIG for \(\SC{3}\) into the ``larger'' SIG for \(\SC{1}\). SIG transformations can generally be carried out in two broad phases (using the current transformation as an example): \begin{description} \item[Duplicate nodes] in \(\SC{3}\) (producing \(\SC{3}'\)) that correspond to supertypes in \(\SC{1}\), to produce nodes corresponding to the extra nodes that \(\SC{1}\) has over \(\SC{3}\). The goal is to produce a node structure similar to that of \(\SC{1}\). The duplicated nodes will be connected to their original nodes by trivial selection edges. These transformations (if applicable) will not alter the information capacity of \(\SC{3}'\) (i.e., \(\equiv\)). \item[Copy and move edges] across the bijective paths connecting the new duplicated nodes in \(\SC{3}'\). The goal is to produce an edge structure similar to that of \(\SC{1}\). The paths that the edges are copied or moved across are bijective, so the annotations of the affected edges will remain unchanged. These transformations (if applicable) will \emph{increase} the information capacity of \(\SC{3}'\) (i.e., \(\preceq\)). \end{description} These two phases generally occur in order, but may be interspersed throughout with the following: \begin{description} \item[Delete duplicate nodes] in \(\SC{3}'\) that are no longer needed, especially those that do not exist in \(\SC{1}\). These transformations (if applicable) will not alter the information capacity of \(\SC{3}'\) (\(\equiv\)). \item[Remove totality annotations] from trivial selection edges in \(\SC{3}'\) to change them into non-trivial selection edges. This decouples subtypes and supertypes to ensure that they represent different domains. These transformations (if applicable) will \emph{increase} the information capacity of \(\SC{3}'\) (\(\preceq\)). \end{description} For example, we might duplicate some nodes, remove some totality annotations, move or copy some edges, delete some no longer needed nodes, move or copy some more edges, then remove some more totality annotations. Following this process, we first duplicate node \(\T{\LS}\) to \(\T{S}\) and node \(\TT{\LS}\) to \(\TT{S}\). To obtain a node structure similar to that of \(\SC{1}\), we also need to further duplicate \(\T{S}\) to \(\T{\NLS}\) and \(\TT{S}\) to \(\TT{\NLS}\). The result of these duplications is shown in Figure~\ref{fig-transform-all-duplicates}. The transformed SIG now has essentially the same node structure as that for \(\SC{1}\), albeit with different node semantics. %%%%%%%%%%%%%%%%%%%% \begin{figure*} \centering \begin{tikzpicture} \matrix[row sep=0.5cm] { \node [input keep] (TLS) {\(\T{\LS}\)}; &[7mm] \node [input keep] (TTLS) {\(\TT{\LS}\)}; &[7mm] &[4mm] &[-4mm] \node (TSSL) {\(\StackTSSL\)}; & & \node (LSCity) {\(\CityLondon\)}; \\ & & & \node (TSname) {\(\T{\Sname}\)}; \\ \node [output] (TLSPlusNLS) {\(\T{S}\)}; & \node [output] (TTLSPlusNLS) {\(\TT{S}\)}; & \node (TSno) {\(\T{\Sno}\)}; & & \node (TSSC) {\(\StackTSSC\)}; & & \node (TCity) {\(\T{City}\)}; \\ & & & & & \node (TStatus) {\(\T{\Status}\)}; \\ \node [output] (TNLS) {\(\T{\NLS}\)}; & \node [output] (TTNLS) {\(\TT{\NLS}\)}; & & & \node (TSSNL) {\(\StackTSSNL\)}; & & \node (NLSCity) {\(\StackTCityMinusLondon\)}; \\ }; \graph{ % relation types to tuple types { [edges=surtotal] (TLS) -- (TTLS), }; % projection edges { [edges=projection left] (TTLS) -- { (TSno), (TSSL) }, (TSSL) -- { (TStatus), (LSCity) }, }; { [edges=projection right] (TSSC) -- { (TSname), (TStatus) }, (TSSL) -- (TSname), (TSSNL) -- { (TStatus), (NLSCity), (TSname) }, }; % selection edges { [edges=selection left] (TSSC) -- { (TSSL), (TSSNL) }, (TCity) -- (NLSCity), }; { [edges=selection right] (TCity) -- (LSCity), }; { [edges={bijection,output},edge label={\scriptsize\(\RelRestrict\)}] { (TLS), (TTLS) } -- { (TLSPlusNLS), (TTLSPlusNLS) }, { (TLSPlusNLS), (TTLSPlusNLS) } -- { (TNLS), (TTNLS) }, }; % insert "gaps" into crossed edges { [edges={white,line width=1.5mm}] (TSno) -- (TSSC), (TSSC) -- (TCity), }; (TSno) -- [funcdep right] (TSSC); (TSSC) -- [projection left] (TCity); }; \end{tikzpicture} \caption{SIG for modified schema \(\bm{S_{3}'}\) after duplicating various nodes to produce analogues of the additional nodes in \(\bm{S_{1}}\). Inputs to the transformation are coloured \textcolor{blue}{blue}, outputs are coloured \textcolor{red}{red}. [\(\equiv\)]} \label{fig-transform-all-duplicates} \end{figure*} %%%%%%%%%%%%%%%%%%%% The next phase is to copy and move edges. To produce the edge \(\T{S} \SurTotal \TT{S}\), we first \emph{copy} \(\T{\LS} \SurTotal \TT{\LS}\) across the path \(\TT{S} \TrivialSelection \TT{\LS}\) (giving \(\T{\LS} \SurTotal \TT{S}\)), then \emph{move} it across \(\T{S} \TrivialSelection \T{\LS}\). We can carry out a similar series of transformations to copy and move \(\T{S} \SurTotal \TT{S}\) to \(\T{\NLS} \SurTotal \TT{\NLS}\). Next, we copy and move the projection edge \(\TT{\LS} \ProjectionEdge \T{\Sno}\) to produce the edges \(\TT{S} \ProjectionEdge \T{\Sno}\) and \(\TT{\NLS} \ProjectionEdge \T{\Sno}\). Similarly, we copy and move \(\TT{\LS} \ProjectionEdge \TSSL\) to produce \(\TT{S} \LabelledEdge{\sigedge{03}}{\RelProject} \TSSC\) and \(\TT{\NLS} \LabelledEdge{\sigedge{02}}{\RelProject} \TSSNL\). Note that the first edge in the latter pair of transformations loses the totality annotation, and the second edge the surjectivity annotation, as a result of composition with the pre-existing non-bijective selection edges in the middle of the SIG. Finally, we carry out similar copy and move transformations to copy the key edge \(\T{\Sno} \KeyEdge \TSSC\) to \(\T{\Sno} \KeyEdge \TSSL\) and \(\T{\Sno} \KeyEdge \TSSNL\). The annotations for these edges are unaffected. The result of all these edge transformations is shown in Figure~\ref{fig-transform-edge-moves}. %%%%%%%%%%%%%%%%%%%% \begin{figure*} \centering \begin{tikzpicture} \matrix[row sep=0.5cm] { \node (TLS) {\(\T{\LS}\)}; &[7mm] \node (TTLS) {\(\TT{\LS}\)}; &[7mm] &[4mm] &[-4mm] \node (TSSL) {\(\StackTSSL\)}; & & \node (LSCity) {\(\CityLondon\)}; \\ & & & \node (TSname) {\(\T{\Sname}\)}; \\ \node (TLSPlusNLS) {\(\T{S}\)}; & \node (TTLSPlusNLS) {\(\TT{S}\)}; & \node (TSno) {\(\T{\Sno}\)}; & & \node (TSSC) {\(\StackTSSC\)}; & & \node (TCity) {\(\T{City}\)}; \\ & & & & & \node (TStatus) {\(\T{\Status}\)}; \\ \node (TNLS) {\(\T{\NLS}\)}; & \node (TTNLS) {\(\TT{\NLS}\)}; & & & \node (TSSNL) {\(\StackTSSNL\)}; & & \node (NLSCity) {\(\StackTCityMinusLondon\)}; \\ }; \graph{ % relation types to tuple types { [edges=surtotal] (TLS) -- [input keep] (TTLS), (TLSPlusNLS) -- [output] (TTLSPlusNLS), (TNLS) -- [output] (TTNLS), }; % FDs (TSno) -- [funcdep left,bend left,output] (TSSL); (TSno) -- [funcdep right,output] (TSSNL); % projection edges { [edges=projection left] (TTLS) -- [input keep] { (TSno), (TSSL) }, (TSSL) -- { (TStatus), (LSCity) }, (TTLSPlusNLS) -- [output] (TSno), }; { [edges=projection right] (TSSC) -- { (TSname), (TStatus) }, (TSSL) -- (TSname), (TSSNL) -- { (TStatus), (NLSCity), (TSname) }, (TTNLS) -- [output] (TSno), (TTNLS) -- [arrows={:->},output] (TSSNL), }; % selection edges { [edges=selection left] (TSSC) -- { (TSSL), (TSSNL) }, (TCity) -- (NLSCity), }; { [edges=selection right] (TCity) -- (LSCity), }; { [edges=bijection,edge label={\scriptsize\(\RelRestrict\)}] { (TLS), (TTLS) } -- { (TLSPlusNLS), (TTLSPlusNLS) }, { (TLSPlusNLS), (TTLSPlusNLS) } -- { (TNLS), (TTNLS) }, }; % insert "gaps" into crossed edges { [edges={white,line width=1.5mm}] (TSno) -- (TSSC), (TSSC) -- (TCity), (TTLSPlusNLS) -- [bend right] (TSSC), }; (TSno) -- [funcdep right,input keep] (TSSC); (TSSC) -- [projection left] (TCity); (TTLSPlusNLS) -- [projection right,arrows={:-{crossbar}>},bend right,output] (TSSC), }; \end{tikzpicture} \caption{SIG for modified schema \(\bm{S_{3}'}\) after copying and moving edges. [\(\preceq\)]} \label{fig-transform-edge-moves} \end{figure*} %%%%%%%%%%%%%%%%%%%% If we compare Figure~\ref{fig-sig-s} with Figure~\ref{fig-transform-edge-moves}, we can see that the transformed SIG for \(\SC{3}'\) now has the same node and edge structure as the SIG for \(\SC{1}\). We still need to remove the totality annotations from the four remaining trivial selection edges, but even when this is done, we do not achieve the desired isomorphism, as the projection edges \(\TT{S} \LabelledEdge{\sigedge{03}}{\RelProject} \TSSC\) and \(\TT{\NLS} \LabelledEdge{\sigedge{02}}{\RelProject} \TSSNL\) have different annotations from the corresponding edges in the SIG for \(\SC{1}\). Technically this means that the information capacities of \(\SC{1}\) and \(\SC{3}\) are incomparable, but the structural differences are so small that it is probably safe to say that the information capacity of \(\SC{3}\) is less than that of \(\SC{1}\) (i.e., \Dominates{\SC{1}}{\SC{3}}). Either way, it is clear that view updates based on this pair of schemas will be problematic. Incidentally, if we created a fourth sub-schema \(\SC{4} = \{\NLS\}\) and compared this with \(\SC{1}\), the result would be similar to \(\SC{3}\). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Conclusion \& future work} \label{sec-conclusion} \noindent In this paper we have shown how to use the concept of relative information capacity and the schema intension graph (SIG) formalism to characterise information equivalence with respect to view updating. The results of our analysis of Date's restriction view example \cite{Date.C-2013a-View} are consistent with his findings. The information capacities of \(\SC{1} = \{S\}\) and \(\SC{2} = \{\LS,\NLS\}\) are equivalent, so it should be possible to effectively propagate view updates between \(\SC{1}\) and \(\SC{2}\), regardless of the configuration of views and base relvars. Conversely, the information capacity of \(\SC{3} = \{\LS\}\) is at best less than that of \(\SC{1}\), implying that there are updates that cannot be propagated between \(\SC{1}\) and \(\SC{3}\). Our analysis shows the importance of clearly identifying all explicit and implicit constraints that can be propagated from the base schema \(\SC{0}\) to its sub-schemas. Omission of constraints could lead to a different SIG structure that might not be comparable, or might lead to an erroneous conclusion about a schema's information capacity relative to another. There are several avenues for future work. While the discussion in this paper focused on the relational context, relative information capacity and the SIG formalism are data model agnostic, and thus should be applicable in non-relational view contexts (e.g., XML). It is unclear at present whether the omission of inclusion dependencies such as foreign keys is significant. If such dependencies are significant, the question then is how best to represent them in the SIG formalism. It is also unclear at present whether copying or moving an edge across a bijective path should necessarily increase information capacity, as no annotations are lost in such a transformation. It may be that the structural change to the SIG implies an increase in information capacity regardless. Further investigation is required. Finally, we have only examined disjoint restriction views in this paper, which are arguably the simplest case of view updating. Further work needs to be done to characterise other types of view configuration, such as projection views, join views, and union views. This will enable us to further refine the application of SIGs in this context. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \balance %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \bibliographystyle{abbrv} \bibliography{VLDB2016_Stanger} \end{document}
Ignore Space
Show notes
View
VLDB_2016/vldb.cls
0 → 100644
% VLDB.CLS - Version 1.8c % % based on: % SIG-ALTERNATE.CLS - VERSION 1.8 % "COMPATIBLE" WITH THE "ACM_PROC_ARTICLE-SP.CLS" V2.7SP % Gerald Murray July 26th. 2005 % % ---- Start of 'updates' ---- % % Allowance made to switch default fonts between those systems using % METAFONT and those using 'Type 1' or 'Truetype' fonts. % See LINE NUMBER 252 for details. % Also provided for enumerated/annotated Corollaries 'surrounded' by % enumerated Theorems (line 841). % Gerry November 11th. 1999 % % Made the Permission Statement / Conference Info / Copyright Info % 'user definable' in the source .tex file OR automatic if % not specified. % % Georgia fixed bug in sub-sub-section numbering in paragraphs (July 29th. 2002) % JS/GM fix to vertical spacing before Proofs (July 30th. 2002) % % Footnotes inside table cells using \minipage (Oct. 2002) % % Enforced 'US letter' page size and updated PVLDB copyright (UR, Oct 2010) % % Made the file template-able, so vol/no information can be dynmacally generated. (AhmetSacan, Sep 2012) % % Added widow line penalties. (AhmetSacan, Sep 2012) % ---- End of 'updates' ---- % \def\fileversion{v1.8c} % for VLDB's and ACM's tracking purposes \def\filedate{July 26, 2005} % Gerry Murray's tracking data \def\docdate {Tuesday 26th. July 2005} % Gerry Murray (with deltas to doc} \usepackage[pdftex,letterpaper]{geometry} % fixed to US letter size for output (since version 1.8c - UR 2010) \usepackage{epsfig} \usepackage{amssymb} \usepackage{amsmath} \usepackage{amsfonts} % % VLDB DOCUMENT STYLE % based on ACM's sig-alternate.cls, modified 31 Oct 2010 for PVLDB, % with VLDB-specific copyright notice and fixed US letter paper size. % % SIG-ALTERNATE DOCUMENT STYLE % G.K.M. Tobin August-October 1999 % adapted from ARTICLE document style by Ken Traub, Olin Shivers % also using elements of esub2acm.cls % HEAVILY MODIFIED, SUBSEQUENTLY, BY GERRY MURRAY 2000 % ARTICLE DOCUMENT STYLE -- Released 16 March 1988 % for LaTeX version 2.09 % Copyright (C) 1988 by Leslie Lamport % % %%% sig-alternate.cls is an 'ALTERNATE' document style for producing %%% two-column camera-ready pages for ACM conferences. %%% THIS FILE DOES NOT STRICTLY ADHERE TO THE SIGS (BOARD-ENDORSED) %%% PROCEEDINGS STYLE. It has been designed to produce a 'tighter' %%% paper in response to concerns over page budgets. %%% The main features of this style are: %%% %%% 1) Two columns. %%% 2) Side and top margins of 4.5pc, bottom margin of 6pc, column gutter of %%% 2pc, hence columns are 20pc wide and 55.5pc tall. (6pc =3D 1in, approx) %%% 3) First page has title information, and an extra 6pc of space at the %%% bottom of the first column for the ACM copyright notice. %%% 4) Text is 9pt on 10pt baselines; titles (except main) are 9pt bold. %%% 5) US letter paper size (since v1.8c) %%% %%% %%% There are a few restrictions you must observe: %%% %%% 1) You cannot change the font size; ACM wants you to use 9pt. %%% 3) You must start your paper with the \maketitle command. Prior to the %%% \maketitle you must have \title and \author commands. If you have a %%% \date command it will be ignored; no date appears on the paper, since %%% the proceedings will have a date on the front cover. %%% 4) Marginal paragraphs, tables of contents, lists of figures and tables, %%% and page headings are all forbidden. %%% 5) The `figure' environment will produce a figure one column wide; if you %%% want one that is two columns wide, use `figure*'. %%% % %%% Copyright Space: %%% This style automatically reserves 1" blank space at the bottom of page 1/ %%% column 1. This space can optionally be filled with some text using the %%% \toappear{...} command. If used, this command must be BEFORE the \maketitle %%% command. If this command is defined AND [preprint] is on, then the %%% space is filled with the {...} text (at the bottom); otherwise, it is %%% blank. If you use \toappearbox{...} instead of \toappear{...} then a %%% box will be drawn around the text (if [preprint] is on). %%% %%% A typical usage looks like this: %%% \toappear{To appear in the Ninth AES Conference on Medievil Lithuanian %%% Embalming Technique, June 1991, Alfaretta, Georgia.} %%% This will be included in the preprint, and left out of the conference %%% version. %%% %%% WARNING: %%% Some dvi-ps converters heuristically allow chars to drift from their %%% true positions a few pixels. This may be noticeable with the 9pt sans-serif %%% bold font used for section headers. %%% You may turn this hackery off via the -e option: %%% dvips -e 0 foo.dvi >foo.ps %%% \typeout{Document Class 'vldb' - based on 'sig-alternate' <26th. July '05>. Modified by G.K.M. Tobin/Gerry Murray} \typeout{Based in part upon document Style `acmconf' <22 May 89>. Hacked 4/91 by} \typeout{shivers@cs.cmu.edu, 4/93 by theobald@cs.mcgill.ca} \typeout{Excerpts were taken from (Journal Style) 'esub2acm.cls'.} \typeout{****** Bugs/comments/suggestions/technicalities to Gerry Murray -- murray@hq.acm.org ******} \typeout{Questions on the style, SIGS policies, etc. to Adrienne Griscti griscti@acm.org} \oddsidemargin 4.5pc \evensidemargin 4.5pc \advance\oddsidemargin by -1in % Correct for LaTeX gratuitousness \advance\evensidemargin by -1in % Correct for LaTeX gratuitousness \marginparwidth 0pt % Margin pars are not allowed. \marginparsep 11pt % Horizontal space between outer margin and % marginal note % Top of page: \topmargin 4.5pc % Nominal distance from top of page to top of % box containing running head. \advance\topmargin by -1in % Correct for LaTeX gratuitousness \headheight 0pt % Height of box containing running head. \headsep 0pt % Space between running head and text. % Bottom of page: \footskip 30pt % Distance from baseline of box containing foot % to baseline of last line of text. \@ifundefined{footheight}{\newdimen\footheight}{}% this is for LaTeX2e \footheight 12pt % Height of box containing running foot. %% Must redefine the top margin so there's room for headers and %% page numbers if you are using the preprint option. Footers %% are OK as is. Olin. \advance\topmargin by -37pt % Leave 37pt above text for headers \headheight 12pt % Height of box containing running head. \headsep 25pt % Space between running head and text. \textheight 666pt % 9 1/4 column height \textwidth 42pc % Width of text line. % For two-column mode: \columnsep 2pc % Space between columns \columnseprule 0pt % Width of rule between columns. \hfuzz 1pt % Allow some variation in column width, otherwise it's % too hard to typeset in narrow columns. \footnotesep 5.6pt % Height of strut placed at the beginning of every % footnote =3D height of normal \footnotesize strut, % so no extra space between footnotes. \skip\footins 8.1pt plus 4pt minus 2pt % Space between last line of text and % top of first footnote. \floatsep 11pt plus 2pt minus 2pt % Space between adjacent floats moved % to top or bottom of text page. \textfloatsep 18pt plus 2pt minus 4pt % Space between main text and floats % at top or bottom of page. \intextsep 11pt plus 2pt minus 2pt % Space between in-text figures and % text. \@ifundefined{@maxsep}{\newdimen\@maxsep}{}% this is for LaTeX2e \@maxsep 18pt % The maximum of \floatsep, % \textfloatsep and \intextsep (minus % the stretch and shrink). \dblfloatsep 11pt plus 2pt minus 2pt % Same as \floatsep for double-column % figures in two-column mode. \dbltextfloatsep 18pt plus 2pt minus 4pt% \textfloatsep for double-column % floats. \@ifundefined{@dblmaxsep}{\newdimen\@dblmaxsep}{}% this is for LaTeX2e \@dblmaxsep 18pt % The maximum of \dblfloatsep and % \dbltexfloatsep. \@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be % 0pt plus ...) \@fpsep 8pt plus 2fil % Space between floats on float page/column. \@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be % 0pt plus ... ) \@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...) \@dblfpsep 8pt plus 2fil % Space between floats on float page. \@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be % 0pt plus ... ) \marginparpush 5pt % Minimum vertical separation between two marginal % notes. \parskip 0pt plus 1pt % Extra vertical space between paragraphs. \parindent 9pt % GM July 2000 / was 0pt - width of paragraph indentation. \partopsep 2pt plus 1pt minus 1pt% Extra vertical space, in addition to % \parskip and \topsep, added when user % leaves blank line before environment. \@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1] \@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2] \@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3] \@beginparpenalty -\@lowpenalty % Before a list or paragraph environment. \@endparpenalty -\@lowpenalty % After a list or paragraph environment. \@itempenalty -\@lowpenalty % Between list items. % Try to prevent widow lines. \clubpenalty=9996 \widowpenalty=9999 \brokenpenalty=4991 \predisplaypenalty=10000 \postdisplaypenalty=1549 \displaywidowpenalty=1602 \@namedef{ds@10pt}{\@latexerr{The `10pt' option is not allowed in the `acmconf' document style.}\@eha} \@namedef{ds@11pt}{\@latexerr{The `11pt' option is not allowed in the `acmconf' document style.}\@eha} \@namedef{ds@12pt}{\@latexerr{The `12pt' option is not allowed in the `acmconf' document style.}\@eha} \@options \lineskip 2pt % \lineskip is 1pt for all font sizes. \normallineskip 2pt \def\baselinestretch{1} \abovedisplayskip 9pt plus2pt minus4.5pt% \belowdisplayskip \abovedisplayskip \abovedisplayshortskip \z@ plus3pt% \belowdisplayshortskip 5.4pt plus3pt minus3pt% \let\@listi\@listI % Setting of \@listi added 9 Jun 87 \def\small{\@setsize\small{9pt}\viiipt\@viiipt \abovedisplayskip 7.6pt plus 3pt minus 4pt% \belowdisplayskip \abovedisplayskip \abovedisplayshortskip \z@ plus2pt% \belowdisplayshortskip 3.6pt plus2pt minus 2pt \def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87 \topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt \itemsep \parsep}} \def\footnotesize{\@setsize\footnotesize{9pt}\ixpt\@ixpt \abovedisplayskip 6.4pt plus 2pt minus 4pt% \belowdisplayskip \abovedisplayskip \abovedisplayshortskip \z@ plus 1pt% \belowdisplayshortskip 2.7pt plus 1pt minus 2pt \def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87 \topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt \itemsep \parsep}} \newcount\aucount \newcount\originalaucount \newdimen\auwidth \auwidth=\textwidth \newdimen\auskip \newcount\auskipcount \newdimen\auskip \global\auskip=1pc \newdimen\allauboxes \allauboxes=\auwidth \newtoks\addauthors \newcount\addauflag \global\addauflag=0 %Haven't shown additional authors yet \newtoks\subtitletext \gdef\subtitle#1{\subtitletext={#1}} \gdef\additionalauthors#1{\addauthors={#1}} \gdef\numberofauthors#1{\global\aucount=#1 \ifnum\aucount>3\global\originalaucount=\aucount \global\aucount=3\fi %g} \global\auskipcount=\aucount\global\advance\auskipcount by 1 \global\multiply\auskipcount by 2 \global\multiply\auskip by \auskipcount \global\advance\auwidth by -\auskip \global\divide\auwidth by \aucount} % \and was modified to count the number of authors. GKMT 12 Aug 1999 \def\alignauthor{% % \begin{tabular} \end{tabular}% \begin{tabular}[t]{p{\auwidth}}\centering}% % *** NOTE *** NOTE *** NOTE *** NOTE *** % If you have 'font problems' then you may need % to change these, e.g. 'arialb' instead of "arialbd". % Gerry Murray 11/11/1999 % *** OR ** comment out block A and activate block B or vice versa. % ********************************************** % % -- Start of block A -- (Type 1 or Truetype fonts) %\newfont{\secfnt}{timesbd at 12pt} % was timenrb originally - now is timesbd %\newfont{\secit}{timesbi at 12pt} %13 Jan 00 gkmt %\newfont{\subsecfnt}{timesi at 11pt} % was timenrri originally - now is timesi %\newfont{\subsecit}{timesbi at 11pt} % 13 Jan 00 gkmt -- was times changed to timesbi gm 2/4/2000 % % because "normal" is italic, "italic" is Roman %\newfont{\ttlfnt}{arialbd at 18pt} % was arialb originally - now is arialbd %\newfont{\ttlit}{arialbi at 18pt} % 13 Jan 00 gkmt %\newfont{\subttlfnt}{arial at 14pt} % was arialr originally - now is arial %\newfont{\subttlit}{ariali at 14pt} % 13 Jan 00 gkmt %\newfont{\subttlbf}{arialbd at 14pt} % 13 Jan 00 gkmt %\newfont{\aufnt}{arial at 12pt} % was arialr originally - now is arial %\newfont{\auit}{ariali at 12pt} % 13 Jan 00 gkmt %\newfont{\affaddr}{arial at 10pt} % was arialr originally - now is arial %\newfont{\affaddrit}{ariali at 10pt} %13 Jan 00 gkmt %\newfont{\eaddfnt}{arial at 12pt} % was arialr originally - now is arial %\newfont{\ixpt}{times at 9pt} % was timenrr originally - now is times %\newfont{\confname}{timesi at 8pt} % was timenrri - now is timesi %\newfont{\crnotice}{times at 8pt} % was timenrr originally - now is times %\newfont{\ninept}{times at 9pt} % was timenrr originally - now is times % ********************************************* % -- End of block A -- % % % -- Start of block B -- METAFONT % +++++++++++++++++++++++++++++++++++++++++++++ % Next (default) block for those using Metafont % Gerry Murray 11/11/1999 % *** THIS BLOCK FOR THOSE USING METAFONT ***** % ********************************************* \newfont{\secfnt}{ptmb at 12pt} \newfont{\secit}{ptmbi at 12pt} %13 Jan 00 gkmt \newfont{\subsecfnt}{ptmri at 11pt} \newfont{\subsecit}{ptmbi at 11pt} % 13 Jan 00 gkmt -- was ptmr changed to ptmbi gm 2/4/2000 % because "normal" is italic, "italic" is Roman \newfont{\ttlfnt}{phvb at 18pt} \newfont{\ttlit}{phvbo at 18pt} % GM 2/4/2000 \newfont{\subttlfnt}{phvr at 14pt} \newfont{\subttlit}{phvro at 14pt} % GM 2/4/2000 \newfont{\subttlbf}{phvb at 14pt} % 13 Jan 00 gkmt \newfont{\aufnt}{phvr at 12pt} \newfont{\auit}{phvro at 12pt} % GM 2/4/2000 \newfont{\affaddr}{phvr at 10pt} \newfont{\affaddrit}{phvro at 10pt} % GM 2/4/2000 \newfont{\eaddfnt}{phvr at 12pt} \newfont{\ixpt}{ptmr at 9pt} \newfont{\confname}{ptmri at 8pt} \newfont{\crnotice}{ptmr at 8pt} \newfont{\ninept}{ptmr at 9pt} % +++++++++++++++++++++++++++++++++++++++++++++ % -- End of block B -- \def\email#1{{{\eaddfnt{\vskip 4pt#1}}}} \def\addauthorsection{\ifnum\originalaucount>3 \section{Additional Authors}\the\addauthors \fi} \newcount\savesection \newcount\sectioncntr \global\sectioncntr=1 \setcounter{secnumdepth}{3} \def\appendix{\par \section*{APPENDIX} \setcounter{section}{0} \setcounter{subsection}{0} \def\thesection{\Alph{section}} } \leftmargini 22.5pt \leftmarginii 19.8pt % > \labelsep + width of '(m)' \leftmarginiii 16.8pt % > \labelsep + width of 'vii.' \leftmarginiv 15.3pt % > \labelsep + width of 'M.' \leftmarginv 9pt \leftmarginvi 9pt \leftmargin\leftmargini \labelsep 4.5pt \labelwidth\leftmargini\advance\labelwidth-\labelsep \def\@listI{\leftmargin\leftmargini \parsep 3.6pt plus 2pt minus 1pt% \topsep 7.2pt plus 2pt minus 4pt% \itemsep 3.6pt plus 2pt minus 1pt} \let\@listi\@listI \@listi \def\@listii{\leftmargin\leftmarginii \labelwidth\leftmarginii\advance\labelwidth-\labelsep \topsep 3.6pt plus 2pt minus 1pt \parsep 1.8pt plus 0.9pt minus 0.9pt \itemsep \parsep} \def\@listiii{\leftmargin\leftmarginiii \labelwidth\leftmarginiii\advance\labelwidth-\labelsep \topsep 1.8pt plus 0.9pt minus 0.9pt \parsep \z@ \partopsep 1pt plus 0pt minus 1pt \itemsep \topsep} \def\@listiv{\leftmargin\leftmarginiv \labelwidth\leftmarginiv\advance\labelwidth-\labelsep} \def\@listv{\leftmargin\leftmarginv \labelwidth\leftmarginv\advance\labelwidth-\labelsep} \def\@listvi{\leftmargin\leftmarginvi \labelwidth\leftmarginvi\advance\labelwidth-\labelsep} \def\labelenumi{\theenumi.} \def\theenumi{\arabic{enumi}} \def\labelenumii{(\theenumii)} \def\theenumii{\alph{enumii}} \def\p@enumii{\theenumi} \def\labelenumiii{\theenumiii.} \def\theenumiii{\roman{enumiii}} \def\p@enumiii{\theenumi(\theenumii)} \def\labelenumiv{\theenumiv.} \def\theenumiv{\Alph{enumiv}} \def\p@enumiv{\p@enumiii\theenumiii} \def\labelitemi{$\bullet$} \def\labelitemii{\bf --} \def\labelitemiii{$\ast$} \def\labelitemiv{$\cdot$} \def\verse{\let\\=\@centercr \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]} \let\endverse\endlist \def\quotation{\list{}{\listparindent 1.5em \itemindent\listparindent \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]} \let\endquotation=\endlist \def\quote{\list{}{\rightmargin\leftmargin}\item[]} \let\endquote=\endlist \def\descriptionlabel#1{\hspace\labelsep \bf #1} \def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin \let\makelabel\descriptionlabel}} \let\enddescription\endlist \def\theequation{\arabic{equation}} \arraycolsep 4.5pt % Half the space between columns in an array environment. \tabcolsep 5.4pt % Half the space between columns in a tabular environment. \arrayrulewidth .4pt % Width of rules in array and tabular environment. \doublerulesep 1.8pt % Space between adjacent rules in array or tabular env. \tabbingsep \labelsep % Space used by the \' command. (See LaTeX manual.) \skip\@mpfootins =\skip\footins \fboxsep =2.7pt % Space left between box and text by \fbox and \framebox. \fboxrule =.4pt % Width of rules in box made by \fbox and \framebox. \def\thepart{\Roman{part}} % Roman numeral part numbers. \def\thesection {\arabic{section}} \def\thesubsection {\thesection.\arabic{subsection}} %\def\thesubsubsection {\thesubsection.\arabic{subsubsection}} % GM 7/30/2002 %\def\theparagraph {\thesubsubsection.\arabic{paragraph}} % GM 7/30/2002 \def\thesubparagraph {\theparagraph.\arabic{subparagraph}} \def\@pnumwidth{1.55em} \def\@tocrmarg {2.55em} \def\@dotsep{4.5} \setcounter{tocdepth}{3} \def\tableofcontents{\@latexerr{\tableofcontents: Tables of contents are not allowed in the `acmconf' document style.}\@eha} \def\l@part#1#2{\addpenalty{\@secpenalty} \addvspace{2.25em plus 1pt} % space above part line \begingroup \@tempdima 3em % width of box holding part number, used by \parindent \z@ \rightskip \@pnumwidth %% \numberline \parfillskip -\@pnumwidth {\large \bf % set line in \large boldface \leavevmode % TeX command to enter horizontal mode. #1\hfil \hbox to\@pnumwidth{\hss #2}}\par \nobreak % Never break after part entry \endgroup} \def\l@section#1#2{\addpenalty{\@secpenalty} % good place for page break \addvspace{1.0em plus 1pt} % space above toc entry \@tempdima 1.5em % width of box holding section number \begingroup \parindent \z@ \rightskip \@pnumwidth \parfillskip -\@pnumwidth \bf % Boldface. \leavevmode % TeX command to enter horizontal mode. \advance\leftskip\@tempdima %% added 5 Feb 88 to conform to \hskip -\leftskip %% 25 Jan 88 change to \numberline #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par \endgroup} \def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}} \def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}} \def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}} \def\l@subparagraph{\@dottedtocline{5}{10em}{5em}} \def\listoffigures{\@latexerr{\listoffigures: Lists of figures are not allowed in the `acmconf' document style.}\@eha} \def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}} \def\listoftables{\@latexerr{\listoftables: Lists of tables are not allowed in the `acmconf' document style.}\@eha} \let\l@table\l@figure \def\footnoterule{\kern-3\p@ \hrule width .4\columnwidth \kern 2.6\p@} % The \hrule has default height of .4pt . % ------ \long\def\@makefntext#1{\noindent %\hbox to .5em{\hss$^{\@thefnmark}$}#1} % original \hbox to .5em{\hss\textsuperscript{\@thefnmark}}#1} % C. Clifton / GM Oct. 2nd. 2002 % ------- \long\def\@maketntext#1{\noindent #1} \long\def\@maketitlenotetext#1#2{\noindent \hbox to 1.8em{\hss$^{#1}$}#2} \setcounter{topnumber}{2} \def\topfraction{.7} \setcounter{bottomnumber}{1} \def\bottomfraction{.3} \setcounter{totalnumber}{3} \def\textfraction{.2} \def\floatpagefraction{.5} \setcounter{dbltopnumber}{2} \def\dbltopfraction{.7} \def\dblfloatpagefraction{.5} % \long\def\@makecaption#1#2{ \vskip \baselineskip \setbox\@tempboxa\hbox{\textbf{#1: #2}} \ifdim \wd\@tempboxa >\hsize % IF longer than one line: \textbf{#1: #2}\par % THEN set as ordinary paragraph. \else % ELSE center. \hbox to\hsize{\hfil\box\@tempboxa\hfil}\par \fi} % \long\def\@makecaption#1#2{ \vskip 10pt \setbox\@tempboxa\hbox{\textbf{#1: #2}} \ifdim \wd\@tempboxa >\hsize % IF longer than one line: \textbf{#1: #2}\par % THEN set as ordinary paragraph. \else % ELSE center. \hbox to\hsize{\hfil\box\@tempboxa\hfil} \fi} \@ifundefined{figure}{\newcounter {figure}} % this is for LaTeX2e \def\fps@figure{tbp} \def\ftype@figure{1} \def\ext@figure{lof} \def\fnum@figure{Figure \thefigure} \def\figure{\@float{figure}} \let\endfigure\end@float \@namedef{figure*}{\@dblfloat{figure}} \@namedef{endfigure*}{\end@dblfloat} \@ifundefined{table}{\newcounter {table}} % this is for LaTeX2e \def\fps@table{tbp} \def\ftype@table{2} \def\ext@table{lot} \def\fnum@table{Table \thetable} \def\table{\@float{table}} \let\endtable\end@float \@namedef{table*}{\@dblfloat{table}} \@namedef{endtable*}{\end@dblfloat} \newtoks\titleboxnotes \newcount\titleboxnoteflag \def\maketitle{\par \begingroup \def\thefootnote{\fnsymbol{footnote}} \def\@makefnmark{\hbox to 0pt{$^{\@thefnmark}$\hss}} \twocolumn[\@maketitle] \@thanks \endgroup \setcounter{footnote}{0} \let\maketitle\relax \let\@maketitle\relax \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@subtitle{}\let\thanks\relax \@copyrightspace} %% CHANGES ON NEXT LINES \newif\if@ll % to record which version of LaTeX is in use \expandafter\ifx\csname LaTeXe\endcsname\relax % LaTeX2.09 is used \else% LaTeX2e is used, so set ll to true \global\@lltrue \fi \if@ll \NeedsTeXFormat{LaTeX2e} \ProvidesClass{vldb} [2010/10/19 - V1.8b - based on sig-alternate V1.8 - based on acmproc.cls V1.3 <Nov. 30 '99>] \RequirePackage{latexsym}% QUERY: are these two really needed? \let\dooptions\ProcessOptions \else \let\dooptions\@options \fi %% END CHANGES \def\@height{height} \def\@width{width} \def\@minus{minus} \def\@plus{plus} \def\hb@xt@{\hbox to} \newif\if@faircopy \@faircopyfalse \def\ds@faircopy{\@faircopytrue} \def\ds@preprint{\@faircopyfalse} \@twosidetrue \@mparswitchtrue \def\ds@draft{\overfullrule 5\p@} %% CHANGE ON NEXT LINE \dooptions \lineskip \p@ \normallineskip \p@ \def\baselinestretch{1} \def\@ptsize{0} %needed for amssymbols.sty %% CHANGES ON NEXT LINES \if@ll% allow use of old-style font change commands in LaTeX2e \@maxdepth\maxdepth % \DeclareOldFontCommand{\rm}{\ninept\rmfamily}{\mathrm} \DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} \DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} \DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} \DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} \DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} \DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} \DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}} \DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}} \fi % \if@ll \renewcommand{\rmdefault}{cmr} % was 'ttm' % Note! I have also found 'mvr' to work ESPECIALLY well. % Gerry - October 1999 % You may need to change your LV1times.fd file so that sc is % mapped to cmcsc - -for smallcaps -- that is if you decide % to change {cmr} to {times} above. (Not recommended) \renewcommand{\@ptsize}{} \renewcommand{\normalsize}{% \@setfontsize\normalsize\@ixpt{10.5\p@}%\ninept% \abovedisplayskip 6\p@ \@plus2\p@ \@minus\p@ \belowdisplayskip \abovedisplayskip \abovedisplayshortskip 6\p@ \@minus 3\p@ \belowdisplayshortskip 6\p@ \@minus 3\p@ \let\@listi\@listI } \else \def\@normalsize{%changed next to 9 from 10 \@setsize\normalsize{9\p@}\ixpt\@ixpt \abovedisplayskip 6\p@ \@plus2\p@ \@minus\p@ \belowdisplayskip \abovedisplayskip \abovedisplayshortskip 6\p@ \@minus 3\p@ \belowdisplayshortskip 6\p@ \@minus 3\p@ \let\@listi\@listI }% \fi \if@ll \newcommand\scriptsize{\@setfontsize\scriptsize\@viipt{8\p@}} \newcommand\tiny{\@setfontsize\tiny\@vpt{6\p@}} \newcommand\large{\@setfontsize\large\@xiipt{14\p@}} \newcommand\Large{\@setfontsize\Large\@xivpt{18\p@}} \newcommand\LARGE{\@setfontsize\LARGE\@xviipt{20\p@}} \newcommand\huge{\@setfontsize\huge\@xxpt{25\p@}} \newcommand\Huge{\@setfontsize\Huge\@xxvpt{30\p@}} \else \def\scriptsize{\@setsize\scriptsize{8\p@}\viipt\@viipt} \def\tiny{\@setsize\tiny{6\p@}\vpt\@vpt} \def\large{\@setsize\large{14\p@}\xiipt\@xiipt} \def\Large{\@setsize\Large{18\p@}\xivpt\@xivpt} \def\LARGE{\@setsize\LARGE{20\p@}\xviipt\@xviipt} \def\huge{\@setsize\huge{25\p@}\xxpt\@xxpt} \def\Huge{\@setsize\Huge{30\p@}\xxvpt\@xxvpt} \fi \normalsize % make aubox hsize/number of authors up to 3, less gutter % then showbox gutter showbox gutter showbox -- GKMT Aug 99 \newbox\@acmtitlebox \def\@maketitle{\newpage \null \setbox\@acmtitlebox\vbox{% \baselineskip 20pt \vskip 2em % Vertical space above title. \begin{center} {\ttlfnt \@title\par} % Title set in 18pt Helvetica (Arial) bold size. \vskip 1.5em % Vertical space after title. %This should be the subtitle. {\subttlfnt \the\subtitletext\par}\vskip 1.25em%\fi {\baselineskip 16pt\aufnt % each author set in \12 pt Arial, in a \lineskip .5em % tabular environment \begin{tabular}[t]{c}\@author \end{tabular}\par} \vskip 1.5em % Vertical space after author. \end{center}} \dimen0=\ht\@acmtitlebox \advance\dimen0 by -12.75pc\relax % Increased space for title box -- KBT \unvbox\@acmtitlebox \ifdim\dimen0<0.0pt\relax\vskip-\dimen0\fi} \newcount\titlenotecount \global\titlenotecount=0 \newtoks\tntoks \newtoks\tntokstwo \newtoks\tntoksthree \newtoks\tntoksfour \newtoks\tntoksfive \def\abstract{ \ifnum\titlenotecount>0 % was =1 \insert\footins{% \reset@font\footnotesize \interlinepenalty\interfootnotelinepenalty \splittopskip\footnotesep \splitmaxdepth \dp\strutbox \floatingpenalty \@MM \hsize\columnwidth \@parboxrestore \protected@edef\@currentlabel{% }% \color@begingroup \ifnum\titlenotecount=1 \@maketntext{% \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\@finalstrut\strutbox}% \fi \ifnum\titlenotecount=2 \@maketntext{% \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}% \@maketntext{% \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\@finalstrut\strutbox}% \fi \ifnum\titlenotecount=3 \@maketntext{% \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}% \@maketntext{% \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}% \@maketntext{% \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\@finalstrut\strutbox}% \fi \ifnum\titlenotecount=4 \@maketntext{% \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}% \@maketntext{% \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}% \@maketntext{% \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\par\@finalstrut\strutbox}% \@maketntext{% \raisebox{4pt}{$\S$}\rule\z@\footnotesep\ignorespaces\the\tntoksfour\@finalstrut\strutbox}% \fi \ifnum\titlenotecount=5 \@maketntext{% \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}% \@maketntext{% \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}% \@maketntext{% \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\par\@finalstrut\strutbox}% \@maketntext{% \raisebox{4pt}{$\S$}\rule\z@\footnotesep\ignorespaces\the\tntoksfour\par\@finalstrut\strutbox}% \@maketntext{% \raisebox{4pt}{$\P$}\rule\z@\footnotesep\ignorespaces\the\tntoksfive\@finalstrut\strutbox}% \fi \color@endgroup} %g} \fi \setcounter{footnote}{0} \section*{ABSTRACT}\normalsize%\ninept } \def\endabstract{\if@twocolumn\else\endquotation\fi} \def\keywords{\if@twocolumn \section*{Keywords} \else \small \quotation \fi} \def\terms{\if@twocolumn \section*{General Terms} \else \small \quotation \fi} % -- Classification needs to be a bit smart due to optionals - Gerry/Georgia November 2nd. 1999 \newcount\catcount \global\catcount=1 \def\category#1#2#3{% \ifnum\catcount=1 \section*{Categories and Subject Descriptors} \advance\catcount by 1\else{\unskip; }\fi \@ifnextchar [{\@category{#1}{#2}{#3}}{\@category{#1}{#2}{#3}[]}% } \def\@category#1#2#3[#4]{% \begingroup \let\and\relax #1 [\textbf{#2}]% \if!#4!% \if!#3!\else : #3\fi \else :\space \if!#3!\else #3\kern\z@---\hskip\z@\fi \textit{#4}% \fi \endgroup } % %%% This section (written by KBT) handles the 1" box in the lower left %%% corner of the left column of the first page by creating a picture, %%% and inserting the predefined string at the bottom (with a negative %%% displacement to offset the space allocated for a non-existent %%% caption). %%% \newtoks\copyrightnotice \def\ftype@copyrightbox{8} \def\@copyrightspace{ \@float{copyrightbox}[b] \begin{center} \setlength{\unitlength}{1pc} \begin{picture}(20,6) %Space for copyright notice \put(0,-0.95){\crnotice{\@toappear}} \end{picture} \end{center} \end@float} \def\@toappear{} % Default setting blank - commands below change this. \long\def\toappear#1{\def\@toappear{\parbox[b]{20pc}{\baselineskip 9pt#1}}} \def\toappearbox#1{\def\@toappear{\raisebox{5pt}{\framebox[20pc]{\parbox[b]{19pc}{#1}}}}} \newtoks\conf \newtoks\confinfo \def\conferenceinfo#1#2{\global\conf={#1}\global\confinfo{#2}} \def\marginpar{\@latexerr{The \marginpar command is not allowed in the `acmconf' document style.}\@eha} \mark{{}{}} % Initializes TeX's marks \def\today{\ifcase\month\or January\or February\or March\or April\or May\or June\or July\or August\or September\or October\or November\or December\fi \space\number\day, \number\year} \def\@begintheorem#1#2{% \parskip 0pt % GM July 2000 (for tighter spacing) \trivlist \item[% \hskip 10\p@ \hskip \labelsep {{\sc #1}\hskip 5\p@\relax#2.}% ] \it } \def\@opargbegintheorem#1#2#3{% \parskip 0pt % GM July 2000 (for tighter spacing) \trivlist \item[% \hskip 10\p@ \hskip \labelsep {\sc #1\ #2\ % This mod by Gerry to enumerate corollaries \setbox\@tempboxa\hbox{(#3)} % and bracket the 'corollary title' \ifdim \wd\@tempboxa>\z@ % and retain the correct numbering of e.g. theorems \hskip 5\p@\relax % if they occur 'around' said corollaries. \box\@tempboxa % Gerry - Nov. 1999. \fi.}% ] \it } \newif\if@qeded \global\@qededfalse % -- original %\def\proof{% % \vspace{-\parskip} % GM July 2000 (for tighter spacing) % \global\@qededfalse % \@ifnextchar[{\@xproof}{\@proof}% %} % -- end of original % (JSS) Fix for vertical spacing bug - Gerry Murray July 30th. 2002 \def\proof{% \vspace{-\lastskip}\vspace{-\parsep}\penalty-51% \global\@qededfalse \@ifnextchar[{\@xproof}{\@proof}% } \def\endproof{% \if@qeded\else\qed\fi \endtrivlist } \def\@proof{% \trivlist \item[% \hskip 10\p@ \hskip \labelsep {\sc Proof.}% ] \ignorespaces } \def\@xproof[#1]{% \trivlist \item[\hskip 10\p@\hskip \labelsep{\sc Proof #1.}]% \ignorespaces } \def\qed{% \unskip \kern 10\p@ \begingroup \unitlength\p@ \linethickness{.4\p@}% \framebox(6,6){}% \endgroup \global\@qededtrue } \def\newdef#1#2{% \expandafter\@ifdefinable\csname #1\endcsname {\@definecounter{#1}% \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}% \global\@namedef{#1}{\@defthm{#1}{#2}}% \global\@namedef{end#1}{\@endtheorem}% }% } \def\@defthm#1#2{% \refstepcounter{#1}% \@ifnextchar[{\@ydefthm{#1}{#2}}{\@xdefthm{#1}{#2}}% } \def\@xdefthm#1#2{% \@begindef{#2}{\csname the#1\endcsname}% \ignorespaces } \def\@ydefthm#1#2[#3]{% \trivlist \item[% \hskip 10\p@ \hskip \labelsep {\it #2% \savebox\@tempboxa{#3}% \ifdim \wd\@tempboxa>\z@ \ \box\@tempboxa \fi.% }]% \ignorespaces } \def\@begindef#1#2{% \trivlist \item[% \hskip 10\p@ \hskip \labelsep {\it #1\ \rm #2.}% ]% } \def\theequation{\arabic{equation}} \newcounter{part} \newcounter{section} \newcounter{subsection}[section] \newcounter{subsubsection}[subsection] \newcounter{paragraph}[subsubsection] \def\thepart{\Roman{part}} \def\thesection{\arabic{section}} \def\thesubsection{\thesection.\arabic{subsection}} \def\thesubsubsection{\thesubsection.\arabic{subsubsection}} %removed \subsecfnt 29 July 2002 gkmt \def\theparagraph{\thesubsubsection.\arabic{paragraph}} %removed \subsecfnt 29 July 2002 gkmt \newif\if@uchead \@ucheadfalse %% CHANGES: NEW NOTE %% NOTE: OK to use old-style font commands below, since they were %% suitably redefined for LaTeX2e %% END CHANGES \setcounter{secnumdepth}{3} \def\part{% \@startsection{part}{9}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@} {4\p@}{\normalsize\@ucheadtrue}% } \def\section{% \@startsection{section}{1}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@}% GM {4\p@}{\baselineskip 14pt\secfnt\@ucheadtrue}% } \def\subsection{% \@startsection{subsection}{2}{\z@}{-8\p@ \@plus -2\p@ \@minus -\p@} {4\p@}{\secfnt}% } \def\subsubsection{% \@startsection{subsubsection}{3}{\z@}{-8\p@ \@plus -2\p@ \@minus -\p@}% {4\p@}{\subsecfnt}% } \def\paragraph{% \vskip 12pt\@startsection{paragraph}{3}{\z@}{6\p@ \@plus \p@}% {-5\p@}{\subsecfnt}% } \let\@period=. \def\@startsection#1#2#3#4#5#6{% \if@noskipsec %gkmt, 11 aug 99 \global\let\@period\@empty \leavevmode \global\let\@period.% \fi \par % \@tempskipa #4\relax \@afterindenttrue \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse \fi \if@nobreak \everypar{}% \else \addpenalty\@secpenalty \addvspace\@tempskipa \fi \parskip=0pt % GM July 2000 (non numbered) section heads \@ifstar {\@ssect{#3}{#4}{#5}{#6}} {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}% } \def\@sect#1#2#3#4#5#6[#7]#8{% \ifnum #2>\c@secnumdepth \let\@svsec\@empty \else \refstepcounter{#1}% \edef\@svsec{% \begingroup %\ifnum#2>2 \noexpand\rm \fi % changed to next 29 July 2002 gkmt \ifnum#2>2 \noexpand#6 \fi \csname the#1\endcsname \endgroup \ifnum #2=1\relax .\fi \hskip 1em }% \fi \@tempskipa #5\relax \ifdim \@tempskipa>\z@ \begingroup #6\relax \@hangfrom{\hskip #3\relax\@svsec}% \begingroup \interlinepenalty \@M \if@uchead \uppercase{#8}% \else #8% \fi \par \endgroup \endgroup \csname #1mark\endcsname{#7}% \vskip -12pt %gkmt, 11 aug 99 and GM July 2000 (was -14) - numbered section head spacing \addcontentsline{toc}{#1}{% \ifnum #2>\c@secnumdepth \else \protect\numberline{\csname the#1\endcsname}% \fi #7% }% \else \def\@svsechd{% #6% \hskip #3\relax \@svsec \if@uchead \uppercase{#8}% \else #8% \fi \csname #1mark\endcsname{#7}% \addcontentsline{toc}{#1}{% \ifnum #2>\c@secnumdepth \else \protect\numberline{\csname the#1\endcsname}% \fi #7% }% }% \fi \@xsect{#5}\hskip 1pt \par } \def\@xsect#1{% \@tempskipa #1\relax \ifdim \@tempskipa>\z@ \par \nobreak \vskip \@tempskipa \@afterheading \else \global\@nobreakfalse \global\@noskipsectrue \everypar{% \if@noskipsec \global\@noskipsecfalse \clubpenalty\@M \hskip -\parindent \begingroup \@svsechd \@period \endgroup \unskip \@tempskipa #1\relax \hskip -\@tempskipa \else \clubpenalty \@clubpenalty \everypar{}% \fi }% \fi \ignorespaces } \def\@trivlist{% \@topsepadd\topsep \if@noskipsec \global\let\@period\@empty \leavevmode \global\let\@period.% \fi \ifvmode \advance\@topsepadd\partopsep \else \unskip \par \fi \if@inlabel \@noparitemtrue \@noparlisttrue \else \@noparlistfalse \@topsep\@topsepadd \fi \advance\@topsep \parskip \leftskip\z@skip \rightskip\@rightskip \parfillskip\@flushglue \@setpar{\if@newlist\else{\@@par}\fi} \global\@newlisttrue \@outerparskip\parskip } %%% Actually, 'abbrev' works just fine as the default %%% Bibliography style. \typeout{Using 'Abbrev' bibliography style} \newcommand\bibyear[2]{% \unskip\quad\ignorespaces#1\unskip \if#2..\quad \else \quad#2 \fi } \newcommand{\bibemph}[1]{{\em#1}} \newcommand{\bibemphic}[1]{{\em#1\/}} \newcommand{\bibsc}[1]{{\sc#1}} \def\@normalcite{% \def\@cite##1##2{[##1\if@tempswa , ##2\fi]}% } \def\@citeNB{% \def\@cite##1##2{##1\if@tempswa , ##2\fi}% } \def\@citeRB{% \def\@cite##1##2{##1\if@tempswa , ##2\fi]}% } \def\start@cite#1#2{% \edef\citeauthoryear##1##2##3{% ###1% \ifnum#2=\z@ \else\ ###2\fi }% \ifnum#1=\thr@@ \let\@@cite\@citeyear \else \let\@@cite\@citenormal \fi \@ifstar{\@citeNB\@@cite}{\@normalcite\@@cite}% } \def\cite{\start@cite23} \def\citeNP{\cite*} \def\citeA{\start@cite10} \def\citeANP{\citeA*} \def\shortcite{\start@cite23} \def\shortciteNP{\shortcite*} \def\shortciteA{\start@cite20} \def\shortciteANP{\shortciteA*} \def\citeyear{\start@cite30} \def\citeyearNP{\citeyear*} \def\citeN{% \@citeRB \def\citeauthoryear##1##2##3{##1\ [##3% \def\reserved@a{##1}% \def\citeauthoryear####1####2####3{% \def\reserved@b{####1}% \ifx\reserved@a\reserved@b ####3% \else \errmessage{Package acmart Error: author mismatch in \string\citeN^^J^^J% See the acmart package documentation for explanation}% \fi }% }% \@ifstar\@citeyear\@citeyear } \def\shortciteN{% \@citeRB \def\citeauthoryear##1##2##3{##2\ [##3% \def\reserved@a{##2}% \def\citeauthoryear####1####2####3{% \def\reserved@b{####2}% \ifx\reserved@a\reserved@b ####3% \else \errmessage{Package acmart Error: author mismatch in \string\shortciteN^^J^^J% See the acmart package documentation for explanation}% \fi }% }% \@ifstar\@citeyear\@citeyear % GM July 2000 } \def\@citenormal{% \@ifnextchar [{\@tempswatrue\@citex;} {\@tempswafalse\@citex,[]}% % GM July 2000 } \def\@citeyear{% \@ifnextchar [{\@tempswatrue\@citex,}% {\@tempswafalse\@citex,[]}% } \def\@citex#1[#2]#3{% \let\@citea\@empty \@cite{% \@for\@citeb:=#3\do{% \@citea \def\@citea{#1 }% \edef\@citeb{\expandafter\@iden\@citeb}% \if@filesw \immediate\write\@auxout{\string\citation{\@citeb}}% \fi \@ifundefined{b@\@citeb}{% {\bf ?}% \@warning{% Citation `\@citeb' on page \thepage\space undefined% }% }% {\csname b@\@citeb\endcsname}% }% }{#2}% } \let\@biblabel\@gobble \newdimen\bibindent \setcounter{enumi}{1} \bibindent=0em \def\thebibliography#1{% \ifnum\addauflag=0\addauthorsection\global\addauflag=1\fi \section[References]{% <=== OPTIONAL ARGUMENT ADDED HERE {References} % was uppercased but this affects pdf bookmarks (SP/GM October 2004) \vskip -9pt % GM July 2000 (for tighter spacing) \@mkboth{{\refname}}{{\refname}}% }% \list{[\arabic{enumi}]}{% \settowidth\labelwidth{[#1]}% \leftmargin\labelwidth \advance\leftmargin\labelsep \advance\leftmargin\bibindent \parsep=0pt\itemsep=1pt % GM July 2000 \itemindent -\bibindent \listparindent \itemindent \usecounter{enumi} }% \let\newblock\@empty \raggedright % GM July 2000 \sloppy \sfcode`\.=1000\relax } \gdef\balancecolumns {\vfill\eject \global\@colht=\textheight \global\ht\@cclv=\textheight } \newcount\colcntr \global\colcntr=0 \newbox\savebox \gdef \@makecol {% \global\advance\colcntr by 1 \ifnum\colcntr>2 \global\colcntr=1\fi \ifvoid\footins \setbox\@outputbox \box\@cclv \else \setbox\@outputbox \vbox{% \boxmaxdepth \@maxdepth \@tempdima\dp\@cclv \unvbox \@cclv \vskip-\@tempdima \vskip \skip\footins \color@begingroup \normalcolor \footnoterule \unvbox \footins \color@endgroup }% \fi \xdef\@freelist{\@freelist\@midlist}% \global \let \@midlist \@empty \@combinefloats \ifvbox\@kludgeins \@makespecialcolbox \else \setbox\@outputbox \vbox to\@colht {% \@texttop \dimen@ \dp\@outputbox \unvbox \@outputbox \vskip -\dimen@ \@textbottom }% \fi \global \maxdepth \@maxdepth } \def\titlenote{\@ifnextchar[\@xtitlenote{\stepcounter\@mpfn \global\advance\titlenotecount by 1 \ifnum\titlenotecount=1 \raisebox{9pt}{$\ast$} \fi \ifnum\titlenotecount=2 \raisebox{9pt}{$\dagger$} \fi \ifnum\titlenotecount=3 \raisebox{9pt}{$\ddagger$} \fi \ifnum\titlenotecount=4 \raisebox{9pt}{$\S$} \fi \ifnum\titlenotecount=5 \raisebox{9pt}{$\P$} \fi \@titlenotetext }} \long\def\@titlenotetext#1{\insert\footins{% \ifnum\titlenotecount=1\global\tntoks={#1}\fi \ifnum\titlenotecount=2\global\tntokstwo={#1}\fi \ifnum\titlenotecount=3\global\tntoksthree={#1}\fi \ifnum\titlenotecount=4\global\tntoksfour={#1}\fi \ifnum\titlenotecount=5\global\tntoksfive={#1}\fi \reset@font\footnotesize \interlinepenalty\interfootnotelinepenalty \splittopskip\footnotesep \splitmaxdepth \dp\strutbox \floatingpenalty \@MM \hsize\columnwidth \@parboxrestore \protected@edef\@currentlabel{% }% \color@begingroup \color@endgroup}} %%%%%%%%%%%%%%%%%%%%%%%%% \ps@plain \baselineskip=11pt \let\thepage\relax % For NO page numbers - GM Nov. 30th. 1999 and July 2000 \def\setpagenumber#1{\global\setcounter{page}{#1}} \pagenumbering{arabic} % Arabic page numbers GM July 2000 \twocolumn % Double column. \flushbottom % Even bottom -- alas, does not balance columns at end of document \pagestyle{plain} % Need Copyright Year and Copyright Data to be user definable (in .tex file). % Gerry Nov. 30th. 1999 \newtoks\copyrtyr \newtoks\acmcopyr \newtoks\boilerplate \global\acmcopyr={X-XXXXX-XX-X/XX/XX} % Default - 5/11/2001 *** Gerry \global\copyrtyr={200X} % Default - 3/3/2003 *** Gerry \def\CopyrightYear#1{\global\copyrtyr{#1}} \def\crdata#1{\global\acmcopyr{#1}} \def\permission#1{\global\boilerplate{#1}} % %\global\boilerplate={Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, to republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee.} %\newtoks\copyrightetc %\global\copyrightetc{Copyright \the\copyrtyr\ ACM \the\acmcopyr\ ...\$5.00} % Future proceedings chair, please update the following: 1) conference sequence number, 2) date, % 3) location, 4) volume number, 5) Copyright year. \global\boilerplate={Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, to republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Articles from this volume were invited to present their results at The 42nd International Conference on Very Large Data Bases, September 2016, New Delhi, India.} \global\conf{Proceedings of the VLDB Endowment,} \global\confinfo{Vol. 9, No. X} \newtoks\copyrightetc \global\copyrightetc{Copyright 2016 VLDB Endowment 2150-8097/11/11... \$ 10.00} %% Uncomment for camera ready %\toappear{\the\boilerplate\par %{\confname{\the\conf}} \the\confinfo\par \the\copyrightetc.} %% End of vldb.cls -- V1.8c - 05/15/2011 -- %% Ahmet Sacan -- December 2011 (volume, issue, and dates are dynamically updated) %% Uwe Roehm -- Oct-Dec 2010 & Jan-Apr 2011 %% Gerry Murray -- Wednesday July 26th. 2005
Show line notes below