yo,
ich arbeite zur zeit an einem ähnlichen problem. bei mir ist es eine inventarisierung und nicht jedes inventar hat auch die gleichen attribute oder aber ich will ein attribut mehrmals einem gegenstand zuordnen, wie zum beispiel das ein rechner mehrere speicherriegel haben kann aber nicht muss. bei dir ist es so, dass nicht jeder provider auch die gleichen leistungen anbietet.
nun gibt es meiner meinung nach zwei ansätze, die du auch schon beide erwähnt hast. die erste variante ist es über zwei tabellen aufzubauen. die erste tabelle gibt deine provider und die zweite gibt ein komplettes abbild aller möglichen eigenschaften eines products wieder. der vorteil liegt darin, dass man sich erst einmal eine tabelle spart, das ist immer gut. zum anderen vereinfacht es das datenlayout. der nachteil besteht darin, dass man recht unflexibel ist und auch eigenschaften eines produktes mit führt, die ein provider gar nicht anbietet.
die zweite möglichkeit ist eben es über drei tabellen zu lösen. hinzu kommt die tabelle der "individuellen" eigenschaften der produkte. im gunde genommen sind es dann vier tabellen, da man noch eine beziehungstabelle einführen muss.
provider: id, name, email, etc.
produkte: id, provider_id, prodkutname, etc.
Eigenschaften: id, eigenschaft
dies wären die drei entitäten, wobei zwischen produkte und eigenschaften es sich um eine n:m beziehung handelt, sprich noch eine beziehungstabelle dazu kommt. dort steht dann auch der wert der entsprechenden eigenschaft. falls die gleiche eigenschaft einem entsprechenden produkt nur einmal zugeordnet werden kann, kannst du die id auch weglassen und die jeweiligen fremdschlüssel in der beziehungstabelle als primary key nehmen.
produkte_eigenschaften: id, produkte_id, eigenschaften_id, value
welche der beiden methoden nun die bessere ist, dass hängt stark davon ab, wie "dynamisch" deine eigenschaften der provider sind. wenn möglich würde ich das design über zwei tabellen vorziehen, frei nach dem kis motto. es ist einfacher damit zu arbeiten, auch wenn nicht jedes produkt jede eigenschaft besitzt.
wenn sie die eigenschaften der provider aber "zu sehr" unterscheiden, dann nimm den zweiten ansatz.
Ilja