Ich bin neu in SQL und das ist meine erste Post hier. Ich habe mir viele sehr ähnliche Antworten angeschaut, konnte aber meine Frage nicht ganz zu Ende bringen. Hier ist ein Beispiel für das, was ich für eine Spieldatenbank versuche.Viele bis viele relationale Datenbank
Ich habe eine Tabelle, in der Spielercharakterinformation gehalten wird. Ich habe eine weitere Tabelle, in der alle möglichen Statusauswirkungen gespeichert sind. Ich versuche herauszufinden, wie man eine Beziehung erstellt, in der alle/alle/keine der Zeicheneinträge in der ersten Tabelle mit irgendwelchen/allen/keinem der Statuseinträge in der zweiten Tabelle verknüpft werden können. Meine Nachforschungen haben ergeben, dass ich wahrscheinlich eine dritte Tabelle benötige und eventuell zusammengesetzte Primärschlüssel und/oder Ersatzschlüssel verwenden muss?
Nochmals, erstes Mal, so leid tut mir leid, wenn ich das nicht richtig mache. Könnte mir jemand einen Hinweis geben, wie ich dieses Thema durchdenken soll? Vielen Dank.
Also hier ist ein Update basierend auf Antworten. Ich habe anscheinend gearbeitet, was ich zu erreichen hoffte. Hier ist der Code:
create table characters (
char_id int primary key auto_increment,
name varchar(25)
);
create table health_status (
status_id int primary key auto_increment,
stat_name varchar(15)
);
create table char_status (
char_id int,
status_id int,
primary key (char_id, status_id)
);
insert into characters (name) values ('Godzilla');
insert into characters (name) values ('King Kong');
insert into characters (name) values ('Mecha-Dragon');
insert into characters (name) values ('Chris Hanson');
insert into characters (name) values ('Journey');
insert into characters (name) values ('Lou Diamond Phillips');
insert into characters (name) values ('RedHot');
insert into health_status (stat_name) values ('Bleeding');
insert into health_status (stat_name) values ('Shaken');
insert into health_status (stat_name) values ('Frightened');
insert into health_status (stat_name) values ('Petrified');
insert into health_status (stat_name) values ('Poisoned');
insert into health_status (stat_name) values ('Slowed');
insert into health_status (stat_name) values ('Rushed');
insert into health_status (stat_name) values ('Endowed');
insert into char_status (char_id, status_id) values (1, 1);
insert into char_status (char_id, status_id) values (1, 3);
insert into char_status (char_id, status_id) values (1, 6);
insert into char_status (char_id, status_id) values (2, 2);
insert into char_status (char_id, status_id) values (2, 4);
insert into char_status (char_id, status_id) values (3, 7);
insert into char_status (char_id, status_id) values (6, 8);
insert into char_status (char_id, status_id) values (7, 2);
insert into char_status (char_id, status_id) values (7, 7);
select characters.name, health_status.stat_name
from characters
left join char_status on characters.char_id = char_status.char_id
left join health_status ON health_status.status_id =
char_status.status_id;
Ich habe drei Fragen. Sieht irgendjemand irgendeinen Weg, dies zu bereinigen, oder einen besseren Weg, um mein Ziel zu erreichen? Ist die Verbindung PK in der Tabelle char_status wirklich nützlich? Und schließlich: Gibt es eine Möglichkeit, die Ausgabe mit einer Abfrage so zu organisieren, dass der Charaktername nur einmal aufgeführt wird, gefolgt von dem zugehörigen Status - oder ist dies etwas für eine andere Sprache? Danke für die Hilfe von allen!
Wie Sie MySQL verwenden, empfehle ich Ihnen so etwas wie MySQL Workbench versuchen.Damit können Sie solche Beziehungen per Drag and Drop erstellen und Sie können sich mit solchen relationalen Modellen vertraut machen. – harandk
Hallo. Sie müssen ein einführendes Lehrbuch zur Informationsmodellierung und zum Design relationaler Datenbanken lesen. Das ist es, was Ihre Frage verlangt, wenn auch mit einem maßgeschneiderten Tutorial-Beispiel. Wie könnte eine Antwort gerechtfertigt sein - wenn Sie nichts wissen, muss es von Grund auf neu erklärt werden. Wenn Sie eine bestimmte Frage zu einem bestimmten Code oder Design für eine bestimmte Spezifikation haben, stellen Sie eine Frage. – philipxy