I’m having a City model and every city has combat units specified in the model CombatUnit. I initially create a has many through city_combat_units association, but i am not too sure if this is really the best way to go.
Since there are 10 different types of combat units, there’s lots of duplication like :
(city_id, combat_unit_id, number) => (1,1,10)
(city_id, combat_unit_id, number) => (1,2,4)
(city_id, combat_unit_id, number) => (1,3,9)
You get the idea. So, i am wondering. Could it be better to make it so that a City has one combat_units_list where the list attribute is just a serialized hash that contains the names and numbers of the units ?
Would it be a good idea? Would it be versatile ?
Normally I’d suggest you stick with your current model, it allows for easier manipulation of the relationship between your city and your combat units. Yes, you’ll have some minor duplication of ids, but it’s a lot cleaner than having the serialized list as you proposed.
I can also picture some scenarios where having the relationship mapped in a table would help, for instance, if you need to know how many cities have 10 combat units of type 2, answering this question with your current setup it’s pretty straight forward, the other solution implies parsing the list for every city and then finding the coming up with some algorithm to answer the question.
You’ll be saving some bytes on your database, but loading your code with querying logic (which should be the responsability of your db engine if you ask me).
So, to summarize, unless your really need the serialization option for some kind of strange optimization, I’d suggest sticking with your table.