• Hi

    An EAV database structure is by design a performance issue.

    Maybe you can design a hybrid solution. You create tables for all (or most) possible objects which have to be represented by your database with most possible fields. So if you have "Order" objects there some fields which would be needed in most cases like OrderDate, ConfirmationDate, Reference, CustomerId, ... there also some main object types which are needed in most cases like "Customer", "Address", "Contact", ... . In addition you should add some generic fields to your tables as placeholder for other fields like "Reference1" to "Reference10", "OtherDate1" to "OtherDateN", "OtherText1" to "OtherTextN". For any additional fields which are not covered by your main structure use the EAV concept.

    Another approach, but hard do handle, could be a dynamic database. You have a describing table which holds all the meta information and your database will be created automatically. So if the user defines a "Order" object create a new table "DYN_Order1" and hold this information in your meta information table. Same for the fields. Always add sequence numbers to all fields to ensure that two users define objects with same name but different meanings.

    Hope this helps!

    Flo