Ключи в перекрестных таблицах M-to-M?
я использую оба варианта но в разных ситуациях.
1- вариант — если связь не обладает характеристиками, например контент и теги
2 — вариант — при наличии у связи характеристик — т.е. например если нужно ограничить доступное количество подобъектов из контекста первой сущности для второй, то этот лимит хранится в таблице со связью, им нужно манипулировать, для этого и вводится персональный идентификатор
PRIMARY KEY по полю ExpertTechnologyId можно и не делать(в некоторых случаях это может снизить производительность и не всегда действительно востребованно), но само поле ExpertTechnologyId как мне кажется необходимо. Оно удобно для отладки запросов, пригождается в программе. И как вы сами написали, часто первый вариант апгрейдят до второго.