TB16 188
Postad: 16 mar 2020

Översätta schema till sql

Jag vill översätta schemat nedan till SQL-tabeller, men jag är inte säker på förhållandet mellan Dots och Connections

Har inte Dots en relation tillbaka till sig själv som i diagrammet nedan:

Om ja, så försökte jag skapa tabellerna med följande sqript (sqlite):

CREATE TABLE Dots (
idnr integer PRIMARY KEY,
x integer NOT NULL,
y integer NOT NULL,
CONSTRAINT unique_pair UNIQUE(x, y)
);

INSERT INTO Dots VALUES(0,0,0);
INSERT INTO Dots VALUES(3,8,1);
INSERT INTO Dots VALUES(-5,7,2);

CREATE TABLE Connections (
c_id integer PRIMARY KEY,
from integer NOT NULL,
to integer NOT NULL,
weight integer,
CONSTRAINT parent_fk FOREIGN KEY (from) REFERENCES Dots(idnr),
CONSTRAINT parent_fk FOREIGN KEY (to) REFERENCES Dots(idnr),
CONSTRAINT check_not_equal CHECK(from != to)
);

INSERT INTO Connections VALUES(0, 0,1,4);
INSERT INTO Connections VALUES(1, 1,0,7);
INSERT INTO Connections VALUES(2, 2,1,9);

Dock verkar det vara något fel med hur jag deklarerar Connections, för jag får följande meddelande:
SQL Error [1]: [SQLITE_ERROR] SQL error or missing database (near "from": syntax error)

Någon som vet vad jag gör för fel?

Laguna 8980
Postad: 17 mar 2020

Jag misstänker att "from" är ett reserverat ord i SQL.

TB16 188
Postad: 17 mar 2020
Laguna skrev:

Jag misstänker att "from" är ett reserverat ord i SQL.

Där satt den! Det borde jag ju ha förstått :D Tack för hjälpen 

TB16 188
Postad: 17 mar 2020

Så jag bytte namn på attributen from och to till from_d och to_d. När jag har skapat dessa tabeller enligt koden ovan vill jag sedan extrahera data på följande vis:

Testade att köra följande script, men fick en tom tabell som resultat:

SELECT F.x AS x_from, F.y AS y_from, T.x AS x_to, T.y AS y_to, weight
FROM Dots F, Connections, Dots T
WHERE from_d = F.idnr AND to_d = T.idnr;

Någon som vet varför frågan returnerar en tom tabell? 

Laguna 8980
Postad: 18 mar 2020
TB16 skrev:

Så jag bytte namn på attributen from och to till from_d och to_d. När jag har skapat dessa tabeller enligt koden ovan vill jag sedan extrahera data på följande vis:

Testade att köra följande script, men fick en tom tabell som resultat:

SELECT F.x AS x_from, F.y AS y_from, T.x AS x_to, T.y AS y_to, weight
FROM Dots F, Connections, Dots T
WHERE from_d = F.idnr AND to_d = T.idnr;

Någon som vet varför frågan returnerar en tom tabell? 

Får du inga varningar? Var definieras from_d nånstans?

Jag tror att "F.x AS x_from" är bakochfram också. AS har man för att definiera lokala namn för kolumner, så "F.x_from AS xf" skulle vara mer användbart. Och jag tror inte logiken i WHERE fungerar, för tabellen Dots finns bara en gång, så F och T är samma sak.

Svara Avbryt
Close