I agree with Xabre that you seem to be designing from the perspective of the database rather than the user. Nevertheless, the following might be an appropriate solution.
Start from the display of the data, showing all possible attributes:

download bmml source – Wireframes created with Balsamiq Mockups
When the user clicks add or edit, the data display gives way to an in-place form to add or edit the data. The form for each attribute can be tailored to the type of data.
This communicates clearly to the user what the effect is, the whole bag of data doesn't have to be entered in one massive, brittle operation and the display of missing data triggers the user to action.
Some further considerations:
- If there are many attributes, and most can be left empty, a special add attribute option can be added using a dropdown or combobox to find the available attributes.
- If all data must be entered before the object can be used, I would recommend a special "unfinished" state for objects that have not been completed yet.
- If attributes require a form that is too large to be displayed in place, a modal dialog with a greyed out background can be used.