به نظر من طراحی جداول از نظر نرمال سازی مشکلی نداره.
اما سوالی که برام پیش اومد اینه که آیا این که می گید بیماری ای رو می خواید که سه نشانه داشته باشه، مقصودتون اینه که سه نشانه ی به خصوص و دقیقاً مشخص رو داشته باشه یا هر بیماری ای رو می گید که به هر حال حداقل سه تا نشانه داشته باشه.
اگه مقصودتون سه نشانه به خصوصه، با عملگر and در قسمت where می تونید این محدودیت رو اعمال کنید.
بیماری ای که دقیقاً نشانه A «و» و نشانه B «و» و C رو داشته باشه:
select d.* from Disease d inner join Disease_Sign ds on d.DiseaseID = ds.DiseaseID inner join Sign s on ds.SignID = s.SignID
where s.Title = 'A' and s.Title = 'B' and s.Title = 'C'
اگر مقصودتون تعداد نشانه ها است با group by و having راحت می تونید به جواب برسید:
select d.Title from Disease d inner join Disease_Sign ds on d.DiseaseID = ds.DiseaseID
group by d.Title
having count(d.Title) >= 3