Redundanz in Datenbanken

4 Antworten

Redundanz kann auch konzeptionell gegeben sein. Dazu müsste man das Design der Datenbank unter die Lupe nehmen. Das wäre z.B. der Fall, dass man bestimmte Daten, die man als eigene Tabelle auslagern sollte, in Wiederholungen mitschleift.

Wenn die Datenbank richtig konzipiert ist, sind Redundanzen gar nicht möglich. Insofern wäre es schon gut, das Konzept näher zu prüfen. In Grenzfällen kann es auch sinnvoll sein, Redundanzen bewusst zu dulden. Das wäre z.B. der Fall, wenn sie nicht nennenswert ins Gewicht fallen und der Zugriff dadurch schneller wird.

Du müsstest genauer beschreiben, wie die Tabellen aufgebaut sind, und welche Art von Redundanz gesucht wird.

Es kann sich etwa um Redundanz innerhalb einer bestimmten Tabelle handeln, dann könnte man z.B. mit der COUNT()-Funktion und einer Gruppierung auf das vermutete redundante Attribut die Anzahl mehrfacher Einträge bestimmen.

Dann könnte auch gemeint sein, dass Du Redundanz in Form von nicht normalisierten Tabellen hast. In diesem Fall wäre das Schema zu normalisieren und die redundantem Daten entsprechend in weitere Tabellen so auszulagern, dass die bisher redundanten Einträge in den Quelltabellen mit Fremdschlüsseln auf die neuen Nebentabellen referenziert werden.

Geht es lediglich darum, Redundanzfehler aufgrund falscher/ fehlender Normalisierung zu finden, genügt es, vor dem Erstellen der DB zuerst das Schema zu normalisieren.

Ja also ich habe mehrere Tabellen in einer Datenbank erstellt (Ort, Mitarbeiter, Unternehmen,..). Diese wurden auch normalisiert. Die frage lautete in meiner Aufgabe, nach Redundanten Datensätzen zu suchen, bzw. sie zu testen.

0
@Kalicronic

Vielleicht ist sowas wie das hier gemeint: Hier wäre die Annahme, dass jede Firma nur 1x an einem bestimmten Ort sein darf. Eine Firma mit dem selben Namen zweimal oder mehrere Mal am selben Ort wäre demzufolge redundant eingetragen. Herausfinden, welche Firmen mehrfach einem Ort zugewiesen wurden, könnte man z.B. so wie in meinem Beispiel unten:

create table ort (
    id int not null primary key auto_increment,
    ortsname varchar(50)
    );

create table unternehmen (
    id int not null primary key auto_increment,
    fk_ort int not null,
    firmenname varchar (50),
    FOREIGN KEY (fk_ort) REFERENCES ort (id)
    );


insert into ort (ortsname) values ('Berlin');
insert into ort (ortsname) values ('Muenchen');
insert into ort (ortsname) values ('Hamburg');
insert into ort (ortsname) values ('Bremen');

insert into unternehmen (fk_ort, firmenname) VALUES (1, 'Cosmo Gmbh');
insert into unternehmen (fk_ort, firmenname) VALUES (1, 'Cosmo Gmbh');
insert into unternehmen (fk_ort, firmenname) VALUES (2, 'Troendle KG');
insert into unternehmen (fk_ort, firmenname) VALUES (4, 'KPW Bank AG');
insert into unternehmen (fk_ort, firmenname) VALUES (1, 'KPW Bank AG');



select
    u.firmenname, o.ortsname
from
    unternehmen u, ort o
where
    u.fk_ort = o.id;

+-------------+----------+
| firmenname  | ortsname |
+-------------+----------+
| Cosmo Gmbh  | Berlin   |
| Cosmo Gmbh  | Berlin   |
| KPW Bank AG | Berlin   |
| Troendle KG | Muenchen |
| KPW Bank AG | Bremen   |
+-------------+----------+
5 rows in set (0.00 sec)



select
    u.firmenname, o.ortsname, count(*)
from
    unternehmen u, ort o
where
    u.fk_ort = o.id
group by
    u.firmenname, o.ortsname;

+-------------+----------+----------+
| firmenname  | ortsname | count(*) |
+-------------+----------+----------+
| Cosmo Gmbh  | Berlin   |        2 |
| KPW Bank AG | Berlin   |        1 |
| KPW Bank AG | Bremen   |        1 |
| Troendle KG | Muenchen |        1 |
+-------------+----------+----------+
4 rows in set (0.00 sec)
0
@davegarten

ah ja, und wenn man nur die Einträge mit einem count > 1 haben will, müsste man, wie ein anderer User schon beschrieben hat, noch ein HAVING anzahl > 1 einfügen.

0

Hello there,

das ist Auslegungssache. Wie schon gesagt wurde, kann Redundanz grundsätzlich auch gewünscht sein. Das eigentliche Problem nennt sich Integrität. Weil wenn Daten mehrfach im selben Kontext in der Datenbank auftauchen, dann muss gewährleistet sein, dass diese Daten auch an allen Stellen äquivalent sind. Ist dies nicht der Fall gibt es einen Widerspruch, die Integrität der Daten ist verloren gegangen. Es ist denke ich schwer, das konkret zu prüfen. SELECT-Statements helfen da auch ansich nicht weiter, bzw. nur sehr indirekt. Es hängt sehr von der Datenbank ab, aber am besten erkennt man das eigentlich an der Tabellenstruktur. Du hast ja bestimmt Tabellen via CREATE TABLE erstellt und anhand dieser Informationen könnte man dir eher helfen, das zu beurteilen.

MfG

Alex

Was möchtest Du wissen?