Garth Hill wrote:

Would you name an array "employee" because it is a single reference? No;
that would be confusing: containers should be pluralized.


Actually, yes, I would. Containers shouldn't be pluralized. I mean, unless you have more than one container. The definition of a container is one thing that holds other things. It is singular. You could go so far as to call it "employee_list" or "employee_set" or whatever. You don't have some flocks of seagulls. There is only one Flock of Seagulls..

That's so confused I don't know where to start...


I believe the word you seek is "confusing." You are confused. His logic is confusing. I mean, since this is a semantic argument and all.

Although it is occasionally useful to think of tables as type definitions, because of the nature of SQL it is most often more useful to think of them as sets. Hence the collection analogy.


Care to elaborate on this? To me, the (record) set is the result of a query. The table definition fits the idea of a class definition much better. No one that I know would name a class "Employees," so why name a table that? The table contains the definition of a record.

The one thing I would suggest is that you be consistent. That's the only place where I've ever really run into trouble.


What's consistent about using pluralized table names? Plurals aren't consistent. If I have a table of type index, is it indexes or indices? I don't think the "consistent" argument is enough. The argument I would make above all else is simplicity. I've spent years sifting through unnecessarily complex code. The increased complexity of pluralizing table names just doesn't pay off. No one will look at a table named "employee" and think there can be only one. The nature of a table is that it has rows (plural). The nature of a collection is that it has members. Even if it has zero or one members, it is still a collection. I've actually run into cases in code where I have had a collection of collections. So, would I take several "employees" collections and name them "employeeses" ? All things being equal, the simplest way should prevail. Let me give an example. Say you have two tables, one named employee and one named job. Say you want to join them. Here's a nice abstraction (in Perl):

# both tables have an employee_id field
my $table = "employee";
my $join_table = "job";
my $query = "SELECT * FROM $table LEFT JOIN $join_table USING ($table_id)";

Now I've created a nice abstraction. If I had plurals, I'd either have to have some sort of gimmicky plural translator, or hard code it. Both of those solutions are less desirable (added complexity without any benefit).

I used to think like the pluralizers. It made sense until I changed my ways. I'm not afraid to change my ways again. But for now, this is simply a better way to do it. Ed Felt suggested that advanced database theory supports singularization anyhow. Does it really have to be such a religious argument?


Thanks for the explanation Garth. I wasn't sure about academia having the better theory. Research and educational tenets can sometimes miss the mark when compared to real world scenarios. But, I think you've made it pretty clear with your examples that perhaps the old guys that spend all their time thinking about these issues could be right, (as opposed to those mired only in the technical application of Relational Data Bases). This discussion has helped me solidify a previously weak opinion on the subject. I tend to put plural names at the top of spreadsheets for items listed in each table and I think I'll continue this practice. But it's hard for me to consider a database table as simply a spreadsheet table on steroids and do the same with my database definitions. I feel that the ER diagram with it's singularly named entity and attribute definitions maps much more elegantly in both the practical and theoretical sense directly to the table and column definitions of a Relation Data Base. I suppose those who enjoy hard coding and having to make heads or tails of possible multiple "s" and "esses" can stick to the plural naming system. As one who has spent plenty of time in both theory study and practical application, I have to agree with Garth. I think the real issue here is those who see the table name as a definition of the entity type (theory) versus those who think of the table name as a direct description of the actual contents of the table (overly simplified practicality).

Please remember everyone, this is my personal opinion, not to be taken personally by anyone, (I hope :-) ).

Some Python to illustrate (much prettier than perl -- but that's a different subject ;-) ):
cursor.execute("SELECT * FROM `employee` LIMIT 10;")
employees = cursor.fetchall( )
I now have a tuple of ten employees: a set of data with attributes defined by the entity called "employee" not the entities defined by "employees". Definition, not definitions.
Now I can continue to process my data:
for employee in employees:
   do_something_with(employee)

Maybe we're all just straining at a gnat anyways. Or just straining at an "s". :-)

Thanks,

-Ed Felt

/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/

Reply via email to