This one might sound a bit of a “d’oh” to experienced Lotus Notes developers. However, in my experience most of young Notes developers that are just starting to float (and even some swimming ones) are lacking ideas how to organize their Lotus Notes database.

We all know how we felt for the very first time. Dropped into a thing called Notes, with something non-relational called a database, only to find out that it is really a massive component storage and not just a database. All that storing capabilities sooner or later require some sort of database organization. Most would be satisfied with basic configuration and that is fine, if you are creating a small internal database that no one will ever look at. Building a large web based application, one would soon find out that default is not even nearly good enough.

Why is web different?

  1. Domino engine (at least up to version 7.0.3) still doesn’t know how to add Expires headers to css, JavaScript and image files and thus those files are never cached. Yes that is correct. Never.
  2. Using pages for design elements as CSS and JavaScript is (since release 6.0) not recommended, as there are separate sections to store those files (Style Sheets and Files).
  3. Sticking with pages and using computed text to generate links to images is slow and thus effects your web site performance. Specially from remote areas.

Thus, when redesigning a web database, I try to stick to following guidelines:

  1. Put only CSS in pages (if it is really necessary) and use relative linking and 0 computed texts. All other resources are stored in desired places.
  2. Give an alias to all design elements, i.e scripts/myscript.js or images/myimage.gif or styles/mystyle.css.

Naming convention assures me that my design is always easy to find, I can relatively assign links to image resources from CSS without a need for database replica id and most importantly, it allows me to force Expires header to design elements via Web site rules, which (due to design elements now being cached) results into significantly faster web site loading.