Is it ok to let users add new columns and tables to your database? I'm basically making a database of databases. An administrative User can go in and hit "Create Database" (which is basically a table) and set up the column types and how many columns. Other users can then go in and, through an interface, add entries to the database. The point is to create a management system for information within the company. As in, the administrator could create a "Employ" database to store workers with the correct columns and such.

I have it in my head that I should never let users create new tables (which is what a "database" would be) or even columns. I created two tables to store the information that defines what a database/table should be from the users perspective, and two more tables to store the entries and data for those entries. 

I feel a bit like I'm reinventing the wheel. Is it ok just to let users add new tables.
Database design is both an art and a science. End users usually understand neither the art nor the science.  I don't let end users add tables or alter tables; I've never worked anywhere that allowed anything like that.

End users will almost invariably build things that look like either Word documents or Excel spreadsheets. They will only rarely build things that look like databases.


  The point is to create a management system for information within the
  company.


That's what a database is for. If your database is basically a table, as you seem to be saying, I think your users would be better off with a database.

As a database designer, I find these features to be indispensable. I'll give you the SQL keywords and concepts; you can look them up with Google if you like.


CHECK constraints
GRANT and REVOKE
Updatable views
Materialized views
Stored procedures
Foreign key constraints
"Exotic" indexes (function-based indexes, partial indexes, clustered indexes)
PRIMARY KEY and UNIQUE constraints


If you're not going to provide similar features, you should think hard about what might happen. If you don't provide something similar to GRANT and REVOKE, somebody will drop a table or delete rows they shouldn't touch sooner or later.

If you are going to provide similar features, you're reinventing the wheel.