A type of database that was fairly common in the 1960's, but was eventually replaced by RelationalDatabases without much of a fight.
It is alleged that ObjectOrientedDatabases resemble NetworkDatabases in a way that is too close for comfort. The downfall of ObjectOrientedDatabases with regard to stalling market share in the late 1990's is sometimes attributed to drawbacks of NetworkDatabases . In other words OODBMS have not overcome the flaws of NetworkDatabases, according to this view.
One way to define a NetworkDatabase is a network of DictionaryDataStructures. IOW, a pool of dictionaries that may point to one another. This differs from a RelationalDatabase partly in that the highest and primary object is the dictionary instead of a "table" (relational). Of course vendors had their own variations on this theme, some with quasi-relational features and perhaps some HierarchicalDatabase influenced features. Another common feature is "exposed indices". One could select an index and "surf" on it (next, previous, first, last) to retrieve dictionaries (records) in the order of the index. (I have not found any "formal" theory description. This definition/description is just based on specimen observation.)
Not to be confused with a "LAN-Database" or "WAN-Database". "Network" is a data structure, not a matrix of physical wires in this context.
Using database cursors is sometimes seen as a throwback to NetworkDatabases because one is "surfing the index(es)". Relational theory is suppose to hide the existence of indexes (or the lack of) from queries and DB users. For some operations, such as open-ended browsing of tables, I *like* cursors though. Bummer.
There is a difference between capturing and maintaining data on the one hand and presenting and manipulating it on the other. The former is without a question the responsibility a DBMS, and the latter part of the 'application' of that information. A RDBMS doesn't require cursors as part of the data model, rather provides them to clients who don't want to program in Prolog. A cursor doesn't have to run across an index. It can be as arbitrary as the select statement that generated it. A network database requires some sort of index surfing as part of the data model.
My understanding of the big disadvantage of NetworkDatabases was that the navigation paths between entities were determined at database design time; you as a programmer then just followed those paths ("the programmer as navigator"). If the particular navigation path you application turns out to need was missing, you either had to change the database or implement the logic for such a query in your application. Whereas in relational databases, you can use any columns of any tables for a join, whether the database designer thought of the need for such a query or not.
(Can anyone of those who have been around that long correct or confirm the above?)
The same goes for objects. For example, let's say you are given two components to work with, Person and City, and you can't change their source code. The pre-determined "navigation paths" are person.getCity() and city.getPersons(). Now marketing comes up with a great new promotion idea, where they award prices to persons who are named like a city (I know, it's strange, but that's marketing for you). Problem is, there is no person.getPersonsNamedLikeACity(), so you have to go and implement the logic for such a search outside of the Person and City objects. Contrast with relational DBs, where you just say "select * from person, city where person.name = city.name", without touching the database or implementing searching logic in your application.
Note that when you "just say 'select...'" you _are_ "implementing searching logic." -- DanielBarclay?
{WRT to the SQL example, you may want to consider using a LIKE clause of some sort for near matches. Some DB's even have SoundEx() operations.}
You seem to be confused about how objects and classes are used. In the example you give (supposing that indeed I can't change the code of the components of the application I'm maintaining) then one solution could be to introduce a new class, say Promotion, that has the responsibility for find instances of class Person with the same name as an instance of class City. That's perfectly respectable, more respectable that taking Person and bolting on some arbitrary new responsibility in fact. Why would you think otherwise?
If there was a good reason to roll the responsibility into an existing class then we might expect to be able to extend Person using inheritance without changing Person itself.
Several responses:
By the way, objects may be a step back to network databases, but XML goes even further, back to hierarchical... (XmlSucks)
And JQuery is NetworkDatabase reborn? Odd. At this pace, COBOL will be the next big thing. Maybe security concerns will drive the market back into mainframe techniques and languages, eh? Buy stock in COBOL and JCL.
{Wow. How do you get from JQuery to NetworkDatabase? JQuery is a library of Web browser Javascript goodies, with -- among all sorts of other stuff -- mechanisms for retrieving parts of an HTML document in a vaguely query-like fashion -- hence the name. There's nothing remotely NetworkDatabase-like about it, unless you consider an HTML document to be a NetworkDatabase.}
Let me rephrase it to be the "query part of JQuery".
{It's a "query part" to the same extent that a fully-qualified domain name is a "domain query", or a file path is a "file query", or a regular expression is a "text query". I don't think the RelationalModel would be appropriate for those, and none of them involve a NetworkDatabase.}
It has query abilities beyond just basic tree-oriented queries; network-like.
See Also: ModernDinosaur, ObjectsAreDictionaries, NavigationalDatabase, MultiParadigmDatabase