You can store the data in different ways, but in the end it all comes down to in what way and how frequently you need to access this data, since every structure has its own tradeoffs. I see two main options here you can consider:
1. ds_maps
Model every object as a ds_map holding 6 key / value pairs, and store those in a container ds_map. Every object should have a unique ID so you can access it directly starting from the container map.
2. ds_grid
Create a ds_grid with 6 columns, where every row represents an object and every column a property (consider using enums to label the columns).
Solution 1 has the advantage of letting you access a specific object properties in a direct way, without having to loop through every entry. If you need to loop every object frequently though, you are out of luck with ds_maps since it's a very slow process (although there are workarounds for this). Accessing an object properties is also extremely easy and descriptive, it's simply something like var prop = obj[? "some_prop"];
Solution 2 is better if you need to sort, search or frequently loop through all the data, and you can take advantage of the built in ds_grid functions to quickly find an object having a specific property. It's a bit more inconvenient though to manage the whole data set as a whole, since deleting objects or creating new ones requires resizing the grid and moving the data manually. You also don't have the same "self contained" approach to objects you get with ds_maps, it's just a row in a grid.
You may also consider arrays, considering though that you can't really delete entries in array in GM and you don't get as much functionality out of the box as other data structures.
This is a very general explanation, but there's no right or wrong choice here, as said above the ideal solution depends on the details.