wir haben z.b. die option farbe und innerhalb dieser option die möglichen werte rot, blau und grün mit folgenden werten für singleKey:
rot = 2^0 = 1
blau = 2^1 = 2
grün = 2^2 = 4
dann haben wir neben den farben noch verschieden grössen. z.b. small, medium, large und xlarge. deren schlüssel müssen anders sein, als die der farben. der schlüssel jedes optionswertes eines produktes muss eindeutig sein. wir haben in der folge z.b. folgende werte für die grössen:
small = 2^10 = 1024
medium = 2^11 = 2048
large = 2^12 = 4096
xlarge 0 2^13 = 8192
weitere optionen und optionswerte sind denkbar. für die erläuterung des zugrunde liegenden prinzipts sind diese allerdings ohne belang. es läuft dann immer genau gleich.
die summe zweier (oder mehrerer) dieser schlüssel ist immer so eindeutig, wie ein einzelner schlüssel. um also einer kombination von optionen einen schlüssel zuzuordnen, nimmt man einfach deren summe. also wie folgt:
rot und small = 1 + 1024 = 1025
oder large und grün = 4096 + 4 = 4100
oder xlarge und blau = 8192 + 2 = 8194
damit es richtig spannend wird fügen wir noch gleich eine weitere option hinzu. sagen wir z.b. den schnitt.
eng = 2^15 = 32768
normal = 2^16 = 65536
weit = 2^17 = 131072
die kombination blau, large und eng hätte also folgenden schlüssel: 2 (blau) + 4096 (large) + 32768 (eng) = 36866. es gibt keine andere kombination von optionen, die nach diesem prinzip den gleichen schlüssel ergeben würde.
soweit so gut. allerdings wollen wir bei einer kombination nicht nur eindeutigkeit, sondern auch reversibilität. wir möchten also anhand des schlüssels herausfinden können, aus welchen optionen eine kombination besteht. auch das ist ohne weiteres möglich, wie folgendes beispiel zeigt:
wir haben den schlüssel (36866) und setzen diesen in eine binäre zahl um. dann erhalten wir: 100100000000010 wenn wir uns nun die positionen der einzelnen einsen anschauen, dann stellen wir fest, dass deren position in abhängigkeit zu den optionen steht. wir haben einsen an den positionen 2, 12 und 15. ein kurze rechnung ergibt nun den schlüssel der einzelnen positionen. also 2^2 = 4 = blau, 2^12 = 4096 = large und 2^15 = 32768 = eng.
der schlüssel 36866 sagt uns also, dass es sich um ein shirt in blau, der grösse large und des schnittes eng handelt.
voraussetzung für dieses prinzip ist einfach, dass die schlüssel der optionen für jedes produkt eindeutig sind.
ach ja, fast hätte ich es vergessen, selbstverständlich bringt mysql für diese rechnungen die nötigen funktionen mit. sonst wäre es etwas umständlich. aber das lässt sich alles in ganz normalen queries lösen. also keine rechnungen ausserhalb des rdbms.
alles klar?
