- PeterMoulding.com
- Author
- Trainer
- Speaker
- Business Coach
- How to write a How To book
- PHP Courses
- Speaking
- Web Architect
- Australia
- Books
- Authors
- Akkana Peck
- Alex Berenson
- Andrew Nugent
- Ben Sanders
- Brock Clarke
- Chris Simms
- David Mercer
- Dianna Mullet
- Don Winslow
- Dori Smith
- Harlan Coben
- Jack McDevitt
- James Wines
- Jerry Yudelson
- John Grisham
- Kevin Mullet
- L. E. Modesitt Jr.
- Laurell K. Hamilton
- Marshall Karp
- Martina Cole
- Michael Marshall Smith
- Michel Roux Jr
- Nadia Sawalha
- Philip Pullman
- Raymond Khoury
- Richard North Patterson
- Robert Masello
- Sally Roth
- Sarah Langan
- Stella Rimington
- Stephen Booth
- Stephen King
- Stephen Leather
- T.C. Boyle
- Tom Negrino
- Tony Hillerman
- Urban Waite
- Val McDermid
- Valerio Massimo Manfredi
- Beginning GIMP
- Beginning Visual C++
- Culturalism
- Fiction
- A Drink Before The War
- A Talent for War
- Bag of Bones
- Blood and Ice
- Burn
- Dark Lady
- Dead Line
- Eclipse
- Empress of Eternity
- Exley
- Flipping Out
- Just One Look
- Nightfall
- Pet Sematary
- Savage Moon
- Skinwalkers
- Starvation Lake
- The Fallen
- The Gardens of the Dead
- The Jump
- The Last Templar
- The Mermaids Singing
- The Midnight Mayor
- The Secret Soldier
- The Summons
- The Terror of Living
- The Testament
- The Tower
- Under the Dome
- Virus
- AJAX and PHP
- Aging with Grace
- Food books
- Green Architecture
- Life Is So Good
- SQL: The Complete Reference
- The Backyard Bird Lover's Ultimate How-to Guide
- The Garden Gurus
- Authors
- Sustainability
- -18 hours left to decide the future of Australia
- Campbells vegetable stock or Massel vegetable stock?
- Carbon Sequestration
- Carbon tax for Australia is a fraud
- Copenhagen will fail
- Cost of living in Australia
- Dick Smith jumps on the population bandwagon
- Dry Run: Preventing the Next Urban Water Crisis
- Energy Saving Lights
- Garlic
- How many people can live in Australia?
- Its obsolete, throw it out!
- Julia Gillard offers 9.9 billion dollars bribe to Rob Oakeshott
- Laundry detergent
- Petrol or Diesel?
- Reflective foil batts kill
- RoHS
- Sea level to rise 3mm due to climate change
- Solar power
- Spring again in Sydney
- Sustainable fuels
- The CRUD Tax is back
- The people who make building regulations do not own houses
- Water efficiency
- Which insulation is safer, foil or wool?
- Will Australia reduce greenhouse gas emissions?
- Technology
- Android or Blackberry or iPhone or a flip phone?
- Apple versus Google 2011
- Cameras
- Cars
- Colour
- Burgundy
- Colour Blindness
- Colour Names
- Dulux colours
- Pantone colours
- Safe Colours
- Seculine ProDisk Mini colour balance card
- What Causes Colour Blindness?
- Hardware
- Batteries for the Digital Age
- Cables
- Cases
- Computer reliability
- Computrace
- Disks
- Astone ISO Gear 481E
- Best SSD for your notebook computer
- Disk block size
- Hitachi disk HDS722020ALA330
- LaCie USB 2.0 250 GB mobile hard drive design by F.A. Porsche
- SMART disk
- Samsung 2 TB HD204UI quiet low power disk for mass storage
- Seagate and Samsung merge disk business
- Select the right disk for your RAID array
- USB disk speed
- Western Digital WD20EARX 2 GB SATA 3 disk
- How long should computer hardware last?
- Keyboards
- Mainframe
- Memory cards
- Monitors
- Netbooks, notebooks, tablets, and xPads
- Network Attached Storage
- OLED Displays
- PC's are a thing of the past
- Printers
- Quiet
- Samsung Galaxy S
- Speed
- Television
- Tools
- USB
- Worst computer movies
- Xserve is dead. What next?
- Your backup will not work
- Z68 motherboards
- iPad or Acer Aspire One?
- IQ
- LG Intello Washing Machine
- Lack of a challenge
- Networks
- 802.11n wireless networking
- D-Link DIR-655 wireless router
- D-Link DWA-160 Xtreme N dual band USB adapter
- D-Link DWA-556 Xtreme N PCI Express desktop adapter
- MIMO
- NBN spends another $12 billion of our tax money on nothing
- National Broadband Network
- Netgear wireless modem router DGND3300 with 300 Mbps 802.11n
- Refrigerator kills wireless broadband
- Small Wireless Network
- TP-LINK TL-SG10005D 5 port gigabit switch
- TP-Link TL-WR1043N wireless N gigabit router
- Telstra Pre-paid Mobile Wi-Fi
- Where are the router plus proxy server combinations?
- Open Source documentation
- Software
- 7-zip
- Accounting
- Asterisk
- Audacity
- Backup software
- Bloat only in Windows
- CAD
- CDex
- Disk imaging software for copying and backup
- Exact Audio Copy
- Filezilla
- Firefox
- Java
- LibreOffice or OpenOffice?
- Linux
- 1 in 5 servers will ship with Linux
- Android phones outsell iPhone
- Another Move to Linux
- CentOS 5.5 installation on SSD and RAID 5
- Debian
- Debian 5.0.5 AMD64 installation
- Debian 5.06 installation
- Fedora
- Fedora or Ubuntu?
- Gnome or KDE?
- K9copy
- Linux 2.6.38
- Linux Gnome login settings lost
- Linux Mint
- Linux RAID, a rant
- Linux Speed
- Linux Time
- Linux reliability as demonstrated by Ubuntu 10.10
- Linux reliability as demonstrated by Ubuntu 11.4
- Linux still a struggle in 2011
- Linux workstation disk RAID 1
- Linux, NT, Windows, and SETI
- Linux, three years of progress
- London Stock Exchange switches to Linux
- Mandrake Linux 9.2
- The partition is misaligned by 48128 bytes - warning from Linux RAID
- Ubuntu
- How to fix the scroll bars in Ubuntu 11.4 Gnome
- Kubuntu 10.10 alternate installation on desktop with RAID 1
- POWbuntu
- Ubuntu 10.10 after 6 months use
- Ubuntu 10.10 alternate installation
- Ubuntu 10.10 desktop RAID 1
- Ubuntu 10.10 desktop RAID 5
- Ubuntu 10.10 desktop install on a netbook
- Ubuntu 10.10 desktop installation
- Ubuntu 10.10 netbook install on a netbook
- Ubuntu 10.10 server AMD64
- Ubuntu 10.10 upgrade to version 11.4 beta 2
- Ubuntu 10.4
- Ubuntu 11.10
- Ubuntu 11.10 first upgrade
- Ubuntu 11.4 after one month use
- Ubuntu 12.04 beta1 desktop amd64
- Ubuntu One
- Ubuntu by Microsoft?
- Ubuntu desktop upgrade 10.4 to 10.10 failed because I did not check the media
- Ubuntu strikes again
- Upgrade Ubuntu to Linux Mint 12 LDXE for extra speed
- Yes, use Linux but not that distribution!
- Nero
- OpenOffice
- OpenOffice is now Apache Office
- Project management
- Scribus
- Software for Windows and Linux
- Text editors
- Time
- Todo applications
- Tomboy notes
- Top text editors
- Version control
- VideoLAN VLC media player
- Visio
- Webmin
- Webmin installation on CentOS for Web development
- Webmin installation on Ubuntu
- What is the most popular open source software today?
- Windows
- Another Windows person goes Linux
- BAD_POOL_CALLER
- Cygwin
- Microsoft Malicious Software Removal Tool cannot find a common virus
- One of the developers of Windows XP is criminally insane
- There are unused icons on your desktop
- W32time
- Which Windows version?
- Windows 7 Home Premium
- Windows XP Stop 0x0000007B during installation
- Windows XP is a disaster
- Windows processes
- XML
- Zip, bzip, gzip, or 7zip?
- configFree
- Technology Succession Planning
- VoIP
- Web Sites
- Drupal
- Do Drupal themes have to use the GPL?
- Drupal 7
- A better search facility for Drupal
- Drupal - performance or flexibility
- Drupal 7 Fields are hard to fix
- Drupal 7 new features
- Drupal 7 ships on January 5
- Drupal 7.14
- Drupal 7.4 hits PeterMoulding.com
- Drupal function sequence
- The evolution of a module
- Undefined index: headers in DefaultMailSystem->mail() (line 54 of /modules/system/system.mail.inc).
- Undefined index: to in DefaultMailSystem->mail() (line 83 of /modules/system/system.mail.inc).
- implode(): Invalid arguments passed in DefaultMailSystem->format() (line 23 of /modules/system/system.mail.inc).
- Drupal 8
- Drupal Code Load Cut
- Drupal How To
- Drupal Modules
- Backup and Migrate
- Browscap
- CKEditor with Drupal WYSIWYG
- Captcha
- Cel
- Colorbox
- Content Construction Kit
- Content type
- Devel module for Drupal
- Drupal Rules as an automation language
- Drupal Spam add-on module
- Form alter to node
- IMCE
- IMCE Wysiwyg bridge
- ImageAPI
- Jdog
- Lightbox2
- Module variable
- Node Gallery Access
- Node_Gallery
- Path
- Path redirect
- Pathauto
- Pet
- Search
- Service links
- Session Variable
- Statistics
- Taxonomy
- Token
- Token ex
- Transliteration
- Trigger
- Watch
- Other modules
- Drupal Training
- Drupal access controls need a major rewrite
- Drupal coding tricks
- Drupal performance
- Drupal themes for the future
- Drupal.org colours
- Import existing data into Drupal
- Multiple Web sites made easy using Drupal multisite and the right start
- drupal_lookup_path()
- Adobe PDF
- Apache
- Apache Mahout
- Audi.com
- Bleet
- CSS Strikes Again
- CSS or xCSS
- Can you believe Facebook or email?
- Content Management Systems
- Databases
- Facebook scam
- Font
- Fonts
- HTML
- Install Apache, MySQL, and PHP 5 in Ubuntu 11.4 using the Ubuntu Software Centre
- Language Codes
- Marketing
- Memcache
- Nginx
- Open source development hits another roadblock
- Oscars
- PHP
- SPDY
- Search software
- Techoni.com.au
- Theme themes
- Things to hate on Web sites
- U.S. Patent No. 6,985,875
- Virtual Private Server
- Visible Improvement
- Web 4.0
- Web browser usage
- Web browsers
- Web site development
- Bluefish
- Crying over spilt code
- Eclipse and PHP
- Getting a Git client, a story of ancient technology and pain
- HTTrack
- MVC
- Netbeans
- PHP or ..., CakePHP/Symfony/ZF versus ...
- Programming
- Superfish
- Web browser emulators for testing your Web site
- Web development frameworks
- Web site books
- Web site development on your own computer
- Webmin or phpMyAdmin or cPanel for creating databases?
- aiki framework
- jQuery
- Views development - Learn Fields first
- Views development - Learn Actions and Rules
- jQuery .each()
- jQuery .has()
- jQuery .is()
- jQuery and Firefox Firebug
- jQuery children
- jQuery for people not using Drupal - Installation and getting started
- jQuery hover
- jQuery hover de-duplication example
- jQuery or CSS?
- jQuery performance
- jQuery tests
- Web site hosting
- Westpac Web site still broken after two years and ten months
- Wordpress wins another CMS survey
- Drupal
Database abstraction
Submitted by Peter on Wed, 2011-05-11 19:48
Database abstraction is the process of separating database storage from your use of the data in your programming code. What, when where, why do you abstract? Here are the main reasons/methods/answers.
Abstract?
What is abstraction? A form of translation combined with hiding. Think about flying on commercial airlines as a passenger. Do you know the cabin is partially pressurised to keep you alive at high altitudes? Most people do not know. It is one of the things you do not have to think about because someone else performs the work to make you life easier and safer.
Abstraction gives you the opportunity to separate out specialised work to special workers, or suppliers, and keep your application programmers focused on the data required for the application. You can hire a database specialist to work on the database and present an abstract view of the database to the application programmers. You can hire a web services expert to create specific Web services code that presents a simplified service to the application developers. Any connection or special processing can be simplified when presented to the application using the result.
Why abstract?
There are two main reasons for abstraction. The first reason is to make life easier for the application programmers. The second reason is to maintain compatibility between databases.
Your application might focus on money. your database might not store money in an appropriate format. Your database administrator might offer to create a special money format using stored procedures
or some other trick available in the database. Your application programmers work with money. The database internally converts the money to a different format for storage and performs the reverse conversion when you read the data.
A database level abstraction, commonly called a view, can remove data from your view of a table or combine multiple tables as id they are one. Think of a customer account where they identify the city, state, or country where they live. You have a separate table supplying tax rates by city, state, or country. A view could return customer accounts with their tax rates added to their address.
A common use of views is to remove the year from your birth date. Human resources can see your full date of birth so they can calculate your retirement date. Everybody else can see the day and month of your birthday so they can celebrate your birthday but not your age, becaue your age is confidential.
Perhaps you are converting from database brand A to database brand B. As an example, PostgreSQL has special field formats for geometric measurements, the type you might use in computer aided design or mapping. If you use them then convert to MySQL or most other databases, you have to emulate the geometric measurements. Database abstraction lets you perform the emulation in one place outside of your application.
When?
Consider a company with many applications using MySQL and one application using PostgreSQL. The company decides to reduce maintenance overheads by converting the lone PostgreSQL application to MySQL. They only need a single one off conversion without database abstraction.
Now consider te same company with several applications using PostgreSQL and management arguing about the choice of MySQL or PostgreSQL. You start converting applications from PostgreSQL to MySQL then management change their minds and you have to convert all the MySQL applications to PostgreSQL. A better solution would be to convert the applications to use an abstraction layer compatible with both MySQL and PostgreSQL. You can then switch from one database to the other and back any time management change their minds.
Think about the applications you create today and the databases of tomorrow. MySQL does not have a true binary bit field, a boolean field, and emulates boolean using a small integer. There are some simple databases with no boolean fields. Copying data between database types is dangerous because the data conversions may introduce errors. You can change your approach and introduce your own abstraction to store binary fields as integer for compatibility with al databases.
Where?
You can perform abstraction in your own code or add a layer of abstraction software or use abstraction in your programming language or in SQL or in your database. You choose and you can choose more than one place for abstraction.
You can add abstraction in your code with a simple function, perhaps on called integer_to_boolean. You get maximum flexibility and two main disadvantages. First, you might forget to use the function. Second, you have to tell your code the type of database used to store the data.
You can add abstraction in your code with a class, perhaps on called boolean_emulator. You get maximum flexibility plus the class could return the data in several formats including printable strings. You still have the same two disadvantages, you might forget to use the class and you have to tell your class the type of database used to store the data.
Using PHP as a programming language example, PHP performs some data conversions automatically as a form of code simplification or abstraction. PHP also has a database abstraction called PDO. You can replace PHP MySQL code with PHP PDO code and instantly most of your database accesses can work on MySQL plus PostgreSQL and several other databases. PDO only abstracts the database access, not the database column conversions, leaving you with some additional work.
There are database abstraction layers with ADOdb as an example of a well known layer with a long history. Some content management systems chose ADOdb as their abstraction layer. ADOdb used to be a leader in the field and now drags behind because ADOdb tries to maintain backward compatibility too far.
Databases offer some abstraction through their access layer. PostgreSQL and MySQL both let you access them direct for speed and accuracy. They both let you also choose ODBC as an independent database access method. ODBC returns some data abstracted because ODBC is not designed to handle every data type from every type of database.
Views are an abstraction offered by some databases and the flexibility varies from database to database. in some databases, a view is created by code you add to the database. Views created by simply hiding some data are a convenience when you first use them and are a roadblock when your database administrator leaves because your application programmers cannot find out how the data is maintained. The main advantage of a view is the ability to severely restrict the data visible to an application programmer.
Stored procedures are code stored in a database then run for every database update and access. Look at the cost of stored procedures from the perspective of the manager. Your Web site is written in PHP. Your stored procedures may have to be written in Perl or some other language, adding to your maintenance cost. Your applications are written by application programmers but the stored procedures are written by someone who is not normally a programmer and may not be subject to the same testing or control. When your database administrator leaves, you may have to hire a very experienced replacement to ensure the stored procedures are maintained.
How?
The best form of abstraction is a software layer you can replace when your requirements change. The layer should be written in the same language as your applications, assuming all your applications are written in the same language.
The layer should allow some choice of database. PostgreSQL and MySQL both cost less than Oracle. A company using Oracle would, at a minimum, look for an abstraction layer compatible with Both oracle and PostgreSQL to make PostgreSQL a future possibility.
There is no perfect layer, only layers offering more independence than you have without a layer. If your staff know how to use a layer that provides most of what you want, that layer might be a better choice than an unknown layer offering more features but more conversion costs.
Look for a layer known to new staff. ADOdb is less than ideal in some areas but it is widely used and is the standard database abstraction layer for some content management systems. You can find more people with ADOdb experience than many of the alternatives.
Look at frameworks. Some application development frameworks are impossible to use unless you use everything from the framework. Other frameworks are designed to let you use only what you want to use. Zend framework is an example of a PHP framework where they encourage you to use only the parts you need. Look at the database abstraction within the frameworks. Choose the best parts or the whole framework.
Content management systems
Most new web sites are built on content management systems, Drupal is the best example of a modern content management system. Drupal recently grew from version 6 to version 7. Version 6 has a database abstraction layer that works with MySQL and had some compatibility with PostgreSQL but not enough. Drupal 7 has better compatibility with PostgreSQL plus compatibility with several other databases including Oracle and Microsoft SQL server.








