>>PS If you feel like I'm killing you with questions, just let me know.
Hehe... Sometimes questions like these are good, because they stimulate me to remember the areas I've promised myself to study, but keep putting off. Obviously, you have some familiarity with Unix, as evidenced with post thread80-70838 (So are you just asking these questions rhetorically, to provoke discussion...?)
First off, I have been using Unix for 3 or 4 years, and before that I was much more familiar with Windows. This gives me a position of strength when it comes to explaining things to Windows/Mac people, but I am not the seasoned expert that some in this forum are, such as Mike Lacey.
I have not had the chance to play with "big iron" Unix very much (a little Solaris), but mainly my experience comes from Linux, and then my favorite: FreeBSD (
The good thing about FreeBSD is that it comes from the family tree of the grandaddy of all Unixes, while Linux is really just a (very good) carbon copy.
I am a web application developer, spending most of my time on Apache, PHP, Perl, etc... with of course the obligatory database involvement, but I have not worked on any serious data warehousing, ERP, GIS, or some such. My experience with Unix databases comes mainly from MySQL, some PostgreSQL, and one Sybase seminar

. Theoretically, databases should not vary much from OS to OS, but a few things that stand out with Unix databases are:
1) Command line operation all the way. Generally, with a Unix database, you accomplish everything either form the command line or programmatically, unlike MSSQL, in which you are expected to work in the GUI. Generally each of these has a specific SQL command-line environment, and each of these is a little different, so with each one, there is a bit of orientation. Again, there is great flexibility with STDIN and STDOUT in being able to talk to this SQL client. For example, in MySQL, I can run a command line call to the client, without actually entering _into_ it, in order to pipe in a query from a text file (
Code:
#mysql -u username -p < myquery.sql
) or run a dump command to output the contents of a database into a text file (
Code:
mysqldump -u username -p databasename > myoutput.sql
). From there, you can do more complex things such as piping in and out at the same time, etc... This leads to:
2) Maintenance, backup, etc... Most Unix-based databases, expect you to decide when you want to optimize tables, etc... so it is up to you to write your own scripts that handle periodic backups, optimizations (like defragmenting), etc... You should be familiar enough with your system that you can dump a database to a text file (as a series of SQL commands), edit it to fix problems in structure or whatever, and then turn it back into a database, rename tables, etc... and you should know where the binary files that contain the actual data are, and what you can and cannot do with those. Does you database support replication, hot copies, etc..., you need to know these things, and know how to take advantage of them.
3) Performance and scaleability: The more serious DBMs, such as SyBase, often allow you do to such things as mount a disk as a raw device specifically under the database's own filesystem, so it is optimized just for that purpose. If you mount several disks as SyBase devices, it will automatically make them into a software RAID, serving only your database. Beyond this, there are many tweaks you can do, especially at compile time, to optimize a database for your application. MySQL, for example, defaults to supporting many international character sets, but if you only need your language, you can compile just for one character set, thus having a much leaner database. Databases can also be scaled by tieing them together through a network into multiple machines, so you can split up your tables, and have different tables on different machines, while the client application sits on yet another machine and simply sends queries and gets responses. There are many more sophisticated things that can be accomplished besides that. For example, with MySQL, there is a Clustering Toolkit (
that experiments with schema for making a database share its data between multiple servers, as if each were a disk on a RAID system. There are many systems like this in the Serious database world (which I do not have experience with)
4) Then of course there is all the programming stuff, how you actually deal with the database, which is too involved to go into here, but anyone dealing with databases should know ANSI SQL, should know what table or row locking is all about, what transactions are, indexes, keys, Foreign Key Constraints, stored procedures, etc... and which of these your database supports, and how, and maybe even why. (For MySQL, even thought its considered a 'lightweight' database, to the credit of the developers, they explain in detail the how and why of all design choices on the site), as does PostgreSQL, also an open source, but more serious database. (Actually PostgreSQL claims to have "better than row level locking: object level locking"

. Lastly but not leastly, you should have a clue what is meant by "normalization", or your database is doomed to failure.
OK, I've said enough. Others can fill you in much better than I on file serving, print serving, app serving, the finer points of database systems, etc...
If you have any questions about webserving, meet me in the Apache forum. (Let's not pretend Unix can involve another webserver besides Apache ;-) )