I have some problems regarding understanding data dictionary offline/online, I mean a bilingual dictionary English/another language, a searchable dictionary containing approximately (70 000) words each language. Tell me if I am right or not.
1- There are two possibility for the database offline/online. If I make it online, I can use MSSQL, MYSQL, ORACLE etc… to create the database.
2- If I make offline, I can use a text file.txt, MSACCESS, MSEXCEL, SQLite etc…
3- If I make it online, there is the possibility for accessing the whole database by the users.
What are the best approaches to create a bilingual dictionary 70 000 - 80 000words each?
I have never seen the words online and offline applied to a database. What you appear to be contrasting seems to be a DBMS like SQL Server, MySQL, etc., and an embedded database like SQLite.
If I make it [a DBMS], there is the possibility for accessing the whole database by the users.
What do you mean? Are you listing this as an advantage or as a potential vulnerability?
If we're talking just about the simplest of bilingual dictionaries, where you query a word and get back a list of words, the most efficient method is to keep the entire dictionary in memory as a std::multimap<std::wstring, std::wstring> and to initialize it from a text file at startup. Forget about databases; there's little enough data to keep everything in memory.
Just about any reasonable DBMS will cope with the online/offline configuration. FileMaker Pro is another one which is OK. Open Office/Libre has a DBMS too.
A spreadsheet is so far down-market it doesn't deserve comment beyond that.
Program your own adopting the STL <map> idea and text file. multimap is a bit obscure to me but maps are definitely the way to go and the application wouldn't be too hard. Networking the data via a HTML interface for end users is not all that difficult. You'll need to consider where/who owns/pays for the data server.
Well, all DBMSs include access management. For example, you can give a specific account read-only access. But if you don't want your users accessing the database, simple don't have the database listening for connections from the outside. Configure the database so it will only accept local connections from the program and let the program listen for and respond to requests.
Like I said, the best approach IMO is not to use a database at all, but to use an in-memory data structure to respond to queries.
If you definitely want a database, take a look at BerkeleyDB. It's an embedded key-value store for arbitrary data; by default it uses a B-tree and memcmp() to sort keys; it can store multiple values per key. MySQL uses or used it as its backend storage system (i.e. it implements its queries on top of BerkeleyDB). Note that you need to create an account at Oracle to download the sources.
There's not much more to say in support of maps as a good/easy choice of approach so I won't beyond this analogous 2 <map>'s exercise which cropped up a while ago http://www.cplusplus.com/forum/beginner/192939/2/#msg930525
Microsoft Jet Database engine still seems to be around so that's worth adding to the list.
( One thing to keep in mind with all this SQL type stuff is the query for a language dictionary is likely to be not much more than a one-liner requiring a relatively huge overhead. )