Я ничего не знаю о Ruby, но с точки зрения реляционных БД, я бы, вероятно, просто создал специальное, жестко закодированное поле категории для каждого пользователя: Uncategorized
.
Затем, когда вы добавляете навыки, они либо попадают в указанную категорию, либо в категорию по умолчанию для этого пользователя. За исключением этой «специальной» записи для каждого пользователя, все остальное будет отлично работать независимо от того, на какой навык или категорию вы смотрите, и вы можете оставить все свои ограничения на месте, не беспокоясь о нулевых значениях.
UserID, User
1, me
CategoryID, UserID, Category
1,1,Uncategorized
2,1,Web GUI
SkillID, Skill
1,Javascript
2,Knitting
SkillID, CategoryID, Level, Interest
1,2,10,75
2,1,50,1
В зависимости от того, как вы используете Уровень и Интерес, я бы также подумал о том, чтобы сделать их справочными таблицами, чтобы придать значение значениям с точки зрения базы данных (и помочь заполнить раскрывающиеся списки).
и т.д.