Studium, Ausbildung und Beruf
 StudiumHome   FAQFAQ   RegelnRegeln   SuchenSuchen    RegistrierenRegistrieren   LoginLogin

"Wer kennt wen"-Datenbank
Gehe zu Seite 1, 2  Weiter
Neues Thema eröffnen   Neue Antwort erstellen
Foren-Übersicht -> Informatik-Forum -> "Wer kennt wen"-Datenbank
 
Autor Nachricht
niwa
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 16.04.2007
Beiträge: 18

BeitragVerfasst am: 13 Jun 2008 - 16:18:33    Titel: "Wer kennt wen"-Datenbank

HI!

Muss eine Datenbank realisieren und hoffe das mir jemand weiterhelfen kann - ist glaub ich (für einen Informatiker) nicht so schwer...

Die Datenbank soll Personen beinhalten die folgende Attribute aufweisen:
- ID
- Nachname
- Vorname
- Geb.-Datum
- Ort

Das Problem ist nun, dass sich die Personen untereinander kennen können oder auch nicht.
Soll heißen, dass SQL Anweisung wie z.B.:
Wer kennt Herrn Müller?
Wer kennt niemanden?
Wer wird von allen gekannt?
erstell werden sollen.

Muss ich jetzt für jede Person (ID) eine Spalte erstellen in der ich die ID's der Personen die die Person kennt hineinschreibe?
Da muss es doch eine bessere Lösung geben, oder?

Bitte um Tips!

greets
Jockelx
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 24.06.2005
Beiträge: 3596

BeitragVerfasst am: 13 Jun 2008 - 16:29:05    Titel:

Nein, du sollst/musst natürlich eine zweite Tabelle erstellen, in der die ID's
abgelegt werden. Wie das am besten geht, musst du dir mal überlegen.

Gruß,
Jockel
niwa
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 16.04.2007
Beiträge: 18

BeitragVerfasst am: 13 Jun 2008 - 16:55:36    Titel:

O.K. Zwei Tabellen. Aber vor allem die Anweisung "Wer kennt alle Personen?" bereitet mir einige Sorgen.
Wo soll ich angeben was alle Personen sind?

Ganz schön verwirrend, das Ganze....
Jockelx
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 24.06.2005
Beiträge: 3596

BeitragVerfasst am: 13 Jun 2008 - 17:31:59    Titel:

Jemand kennt alle Personen, wenn es in der 2ten Tabelle zu einer ID genau
die Anzahl der Datensätze gibt, wie es in der 1ten Tabelle Einträge -1 gibt.
In der 2ten Tabelle sollten natürlich ID und 'Kennt ID' eindeutig sein, also
beide als Primary Key.
niwa
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 16.04.2007
Beiträge: 18

BeitragVerfasst am: 13 Jun 2008 - 18:29:36    Titel:

Danke. Ich glaub so langsam check ich das.

Hab jetzt mal die 1. Tabelle folgendermaßen erstellt:


CREATE TABLE Personen(
id COUNTER,
Nachname TEXT,
Vorname TEXT,
Geburtsdatum DATE,
Ort TEXT,
PRIMARY KEY(id)
);


Bei der zweiten funktioniert etwas noch nicht - du hast ja gemeint ich soll personen_id als zweiten PRIMARY KEY nehmen - wie schreib ich das und was ist dann der FOREIGN KEY?
Außerdem hab ich ja im Moment nur die ID der Personen aus der ersten Tabelle und die ID des Verzeichnisses in der Tabelle - das heißt mir fehlt noch das "kennt" - da hier aber dann mehr Werte in eine Spalte gehören sollten würd mich interessieren wie das geht

CREATE TABLE Verzeichnis(
id COUNTER,
pers_id INTEGER,
FOREIGN KEY(pers_id) REFERENCES Personen(id),
PRIMARY KEY(id)
);


Ich weiß-dauert bei mir länger, bin aber auch kein Informatiker und muss mich "zwangsweise" damit herumplagen...
Jockelx
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 24.06.2005
Beiträge: 3596

BeitragVerfasst am: 13 Jun 2008 - 19:18:45    Titel:

Ich hatte das eigentlich so gemeint:

CREATE TABLE Verzeichnis(
id COUNTER,
pers_id INTEGER,
FOREIGN KEY(id) REFERENCES Personen(id),
FOREIGN KEY(pers_id) REFERENCES Personen(id),
PRIMARY KEY(id,pers_id)
);

Also der Primary-Key geht über zwei Spalten; über eine ist ja sinnlos, da
jemand mehrere Freunde haben kann und daher häufiger vorkommt.
Jockelx
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 24.06.2005
Beiträge: 3596

BeitragVerfasst am: 13 Jun 2008 - 19:27:45    Titel:

niwa hat folgendes geschrieben:
das heißt mir fehlt noch das "kennt" - da hier aber dann mehr Werte in eine Spalte gehören sollten würd mich interessieren wie das geht


Und das war so gemeint:

Personen:
1 Meier Peter 1.1.75 Berlin
2 Müller Petra 1.1.76 Köln
3 Klose Miro 1.1.77 Warschau

Wenn Klose jetzt Meier kennt, dann kommt in die Tabelle
3 1 (also 3=Klose kennt 1=Meier)
und wenn Meier Müller kennt entsprechend
1 2

Du musst dir noch überlegen, ob wenn Müller Meier kennt Meier auch immer Müller kennen muss (oder ob Müller beim kennenlernen auch zu besoffen gewesen sein darf um sich zu erinnern).
Wenn das nicht sein darf, musst du entweder immer 2 Einträge machen (also z.B. 1 2 und 2 1) oder die Abfrage auf beide Spalten machen, was aber
schlecht ist, da ein 'doppelter Eintrag' 1 2 und 2 1 so nicht verhindert wird).
niwa
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 16.04.2007
Beiträge: 18

BeitragVerfasst am: 13 Jun 2008 - 23:07:48    Titel: hmm

O.K. Vielen Dank, das funktioniert jetzt schon recht gut.
Ich habe aber das COUNTER aus der Tabelle Verzeichnis rausgenommen weil so Klose ja nur eine Person kennen könnte, da ID 3 dann ja nur einmal vorkommen kann/darf.

Ich mach das jetzt also nach dem Muster
3 1
3 2

Jetzt hab ich aber das Problem, dass eine Person ja auch niemanden kennen kann, da ich aber keine Nullwerte in die Tabelle schreiben kann muss es da noch einen anderen Weg geben - aber welchen?

"Wer kennt alle" wäre auch so eine Anweisung die ich nicht checke - muss ich da jetzt eingeben
SELECT id
FROM Verzeichnis
WHERE pers_id=1 AND 2 AND 3
- hab das versucht, kommt aber nur Blödsinn raus.

"Person mit den meisten Bekanntschaften" herauszubekommen wäre dann noch der letzte Punkt den ich zu erledigen hätte.
Müsste irgendwie mit MAX oder SUM zu lösen sein, glaub sogar eher SUM da MAX ja nur den Maximalwert der einzelnen Spalten sucht, oder?

Wenn du mir da noch weiterhelfen könntest wär das echt Top.

MFG
Jockelx
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 24.06.2005
Beiträge: 3596

BeitragVerfasst am: 14 Jun 2008 - 12:02:00    Titel: Re: hmm

niwa hat folgendes geschrieben:

Jetzt hab ich aber das Problem, dass eine Person ja auch niemanden kennen kann, da ich aber keine Nullwerte in die Tabelle schreiben kann muss es da noch einen anderen Weg geben - aber welchen?

Mmh? ID kennt niemanden heisst einfach, dass es keinen Eintrag zu ID
in der Tabelle Verzeichnis gibt.

niwa hat folgendes geschrieben:

"Wer kennt alle" wäre auch so eine Anweisung die ich nicht checke

Hab ich doch schon oben gesagt: Jemand kennt alle, wenn es 'Anzahl der
Einträge in Personen' -1 Einträge zu einer ID in Verzeichnis gibt. Also sowas:

SELECT [ID] FROM Verzeichnis
GROUP BY [ID]
HAVING count(ID) = (SELECT count(*) FROM Personen) -1
niwa
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 16.04.2007
Beiträge: 18

BeitragVerfasst am: 15 Jun 2008 - 18:04:38    Titel:

Danke, für die Hilfe.

Und was wäre dann mit "ID, die die meisten Bekanntschaften hat"?

SELECT MAX (id)
FROM Verzeichnis
würde mir ja nur die höchste ID angeben, nicht aber die, die am öftesten genannt wurde.


Zuletzt bearbeitet von niwa am 15 Jun 2008 - 18:24:17, insgesamt 2-mal bearbeitet
Beiträge der letzten Zeit anzeigen:   
Foren-Übersicht -> Informatik-Forum -> "Wer kennt wen"-Datenbank
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

Chat :: Nachrichten:: Lexikon :: Bücher :: Impressum