With such a wide variety of choices, it can be difficult to decide which one to use. While some people would balk at open source solutions simply because they are free (support is a must-have feature for many people), the ability to get support contracts for these products brings them back into the set of possibilities. Therefore, we will present you with a small list of things you might want to keep in mind when making the choice between DBMSes for your web applications.
Thinking About Your Data
Before you begin selecting a particular database software package, think carefully about your data and how you think you might go about organizing it. Are you going to be building a bunch of small tables, where performance will not be so critical, but ease of organization and visualization would prove desirable? Or will you be building a system around a table that could grow into millions, if not billions, of rows for which performance will be critical?
It is not critical that you know exactly how your data will be laid outwe will talk about this in Chapter 9, "Designing and Creating Your Database"but if we at least have some idea of what our data is going to be and what their order of magnitude is, then we can start to think about what features we will value most in a DBMS.
It may seem obvious, but you should be sure that your choice in database servers supports everything you want it to. Does it work on the platform where you want to place your servers? If you want to deploy non-Windows servers for your web application, Microsoft's SQL Server will not do the trick.
Similarly, some database systems do not fully support Unicode, and since we will be making this an important part of our web applications, we will not use a server that does not correctly handle multi-byte strings. If we imagine that our database will have a complicated logical structure, and we will benefit from transactions (a feature by which we can group a number of operations on the data into a seemingly atomic action), then we should be sure our choice supports this.
As we briefly mentioned when suggesting thoughts about how you might structure your data, performance can be a big concern. If you are writing in an online discussion forum that takes 45 seconds to show an individual discussion, people are not likely to be doing much talking (well, typing).
While it is generally unwise to think that it is safe to design your database and organize your data in an inefficient manner because some database package is "so fast it will take care of it," we should recognize that some systems will scale better than others as data size and user load increase. This will give us more time to reorganize our data should the need arise.
Accessibility from Within PHP
For any DBMS we choose, we want to be sure that any database engine is usable within PHP. The ones we list in this book are fully supported in the language. However, for specific features, you might want to make sure that they can be accessed via the available functions. If you do not see what you need in the PHP Manual, spending some time searching the Internet for discussions about the feature often yields the answers.
Be sure that you can afford whatever database server you choose. It is important not only to consider the cost of the actual database software, but also what it will cost to support it, what sort of hardware requirements the package has, and any operating system costs associated with it.
There is also the cost of training somebody to manage the database, or hiring outside aid to do so. If you were down to choosing between MySQL and Microsoft SQL Server and had someone in your office who had extensive experience with the latter, then this might be a reason to consider that package more favorably despite the higher cost of acquisition. Learning the implementation details, ins and outs, and quirks of a particular database engine can be both time-consuming and frustrating, while finding and hiring somebody to manage your databases full timea job typically called a database administrator (DBA)can be both difficult and expensive.