MySQL Datenbankdesign - Datensätze verknüpfen

chrisi01

Romy lieb haben
ID: 101113
L
26 November 2008
2.854
238
hi

nehmen wir an ich hab folgende Tabelle:

ID|wert
1|1
2|1
3|0
4|0
5|0
6|0
7|0
8|0
9|0
10|0
11|0
12|0

Nun will ich den wert von ID 5-10 auf 1 ändern mir aber dann merken das diese 6 IDs zusammengehören (sprich wenn ich später in einer dieser Spalten den wert wieder 0 setzte will ich die anderen auch mit 0 setzen).

Mein erster Gedanke war eine 2 Tabelle anzulegen und dort folgendermaßen vorgehen:

ID|gehoert_zu
5|6
5|7
5|8
5|9
5|10
6|5
6|7
6|8
6|9
6|10
7|5
7|6
...usw... (wird ja riesig :-?)

Das Problem dabei ist wenn ich 25 IDs miteinander (was vorerst wohl mal das Maximum ist) verknüpfe erhalte ich 24*24 Datensätze und da ich erwarte das viel und oft miteinander verknüpft wird, wird die Tabelle riesig.

Meine 2. Idee war dann es mit einer Tabelle zu machen:

ID|wert|verknuepft_mit
1|1|0
2|1|0
3|0|0
4|0|0
5|1|1
6|1|1
7|1|1
8|1|1
9|1|1
10|1|1
11|0|0
12|0|0

Wenn ich jetzt danach z.b. ID 11 und 12 den Wert 1 setze erhalten diese in verknuepft_mit eben eine 2 und so weiter...

Was meint ihr was ist sinnvoll? Wie mach ich es richtig? Oder hat jemand eine ganz andere (bessere) Idee? Ich bin eigentlich total für Idee 2 will mich aber trotzdem mal um hören was am besten ist. Und falls es jemand interessiert die Abfragen kommen später alle von einen PHP Script sollte hier aber unwichtig sein.

mfg

Chris
 
Werte:
wert_id|wert|gruppe_id
1|1| null
2|1| null
3|0| null
4|0| null
5|1|1
6|1|1
7|1|1
8|1|1
9|1|1
10|1|1
11|0| null
12|0| null

Gruppen:
gruppe_id|name
1|foobar


Sollte später mal ein Wert zu 2 Gruppen gehören, könnte man mit 1:n-Beziehungen weitermachen, oder eventuell auch mit NestedSets
 
hi

Danke dir.
also im Prinzip meine 2 Möglichkeit nur das ich die 2. Tabelle von dir nicht brauche (die Gruppe benötigt keinen Namen es reicht das ich später einfach wieder zusammen ordnen kann)

edit: ein Wert wird in meinen Fall niemals zu 2 Gruppen gehören

mfg

chris
 
Zuletzt bearbeitet:
Somit ist das was Du gedacht hast, richtig.
Also Dein 2. Vorschlag oder die 1. Tabelle von ice-breaker.

Grüße
 
ich finde es eben nur designmäßig höchst fragwürdig eine Tabelle in Segmente anhand eines Attributes zu teilen.
Irgendwas in mir schreit, dass es "Bad Practice" ist.

Is mir irgendwie auch grad komisch, aber es faellt mir nichts besseres ein, mal ein Normalformen Buch rausholen :D
 
update set wert=[0|1] where id>x AND id<y

x = [1..10 oder 12 oder was auch immer]
y halt größer oder gleich x
 
update set wert=[0|1] where id>x AND id<y
Und? :think:
Die Problemstellung war, sich x und y zu merken, um die Änderung ggf. wieder rückgängig zu machen.

Alternativ zu ice-breaker's Idee könnte man im Falle einer Gruppe, den Wert direkt in der Gruppentabellen speichern:
wert_id |wert| group_id
1|0| null
2|X| 1
3|X| 1
4|0| null

group_id |name|wert
1|Foo|1

Klingt "normaler", dafür hat man in der Einzeltabelle "don't cares" drin, die man entweder null setzt oder den letzten Wert drinstehen lässt und im Fall group_id!=null eben ignoriert.
 
Man könnte es auch über Stored Procedures lösen, wenn man das kennt, oder will.
Und inwiefern würde das bei der Datenhaltung weiterhelfen? Immerhin muss der alte Wert ja immer noch irgendwo gespeichert werden und da helfen Stored Procedures als solche nun auch nicht weiter...