Chrisi: DB values trennen ?

Beitrag lesen

Hallo zusammen,

ich sitze gerade an einem DB (MySQL 4.1, wobei die DB möglichst unabhängig sein sollte) Design für eine typische Anbieter Datenbank, kurzes Beispiel:

Tabellen ->

provider: PROVIDER_ID,name,email,etc...
   provider_product: PRODUCT_ID,PROVIDER_ID,VALUE_ID,value
   provider_product_values: VALUE_ID,value

Die Tabelle "provider" enthält die Standartdaten zum Anbieter, "provider_product" enthält die Angaben zu den Produkten die der Anbieter eingetragen hat und "provider_product_values" soll die values enthalten die unter "provider_product.value" gespeichert werden dürfen ;-)

Dazu sei gesagt: "provider" enthält immer einen Datensatz, "provider_product" kann unendlich viele enthalten.

Die Produktvalues unterscheiden sich in Ihrer Form, mal wird nur eine 1 oder 0 benötigt, aber manchmal werden auch Werte oder Worte gebraucht wenn ich z.B. die Bandbreite (56,128,768,1024,etc...) von einem Provider erfassen möchte und im schlimmsten Fall kann ein Provider auch mehr als einen Value auswählen und diesen unter "provider_product.value" abspeichern.

Nun meine Frage an euch: Macht es Sinn bei meinem Vorhaben dieses 3 Tabellen Design anzuwenden ?

Normalerweise sieht so eine Datenbank in 1:n ja etwa so aus:

provider: PID ...
provider_products: id,PID,productname,bandwidth,traffic,email, etc ... Das ganze dann mit ENUM und SET gespickt, wobei ich die beiden Splatentypen irgendwie nicht leiden kann und damit inkompatobel zu anderen Datenbanken werde.

Ich habe mir gedacht ich verzichte auf eine feste Tabelle in der die Produkte erfasst werden, weil nicht jeder Anbieter immer alle Values zu den Produkten benötigt. Dazu kommt das ich gerne die Values vom Design trennen möchte weil dort teilweise Wörter drinnen stehen die ich später evtl. auslagern möchte um die Sprache von den Inhalten der Datenbank ein wenig abzugrenzen.

Genial ist das ich einfach neue Value hinufügen könnte, wenn es z.B. eine Änderung oder eine Erweiterung in der Datenbank gibt würde dies recht schnell und sauber klappen.

Ich sehe aber ein Problem in der Speicherbelegung für die Tabelle "provider_products" im Feld "value" da dort völlig unterschiedliche Werte erfasst werden und ich somit keine eindeutigen Spaltenwerte (smallint,int,varchar,text etc...) festlegen könnte und ich mich wohl oder über für ein varchar entscheiden müsste, was bei manchen Feldern ein große Verschendung wäre und auch die Performance bei Anfragen an die DB sicher drücken würde.

Was haltet ihr davon ? Macht meine Idee überhaupt sinn ? Wie würdet Ihr hier vorgehen ?

Danke für jeden Tipp,

Chrisi