Garantera att en tabell aldrig lagrar avståndet från Y till X om avstånd X till Y redan finns
Målet är att hitta en lösning som garanterar att tabellen aldrig lagrar avståndet från Y till X om det redan har avståndet från X till Y. Det går tydligen att lösa på följande vis:
CREATE TABLE Distances (fromCity TEXT,
toCity TEXT,
distance INT,
CONSTRAINT only_one_direction CHECK (fromCity < toCity)
) ;
Varför använder man ‘<’ och inte ‘!=’ ? Det känns väldigt främmande att använda en olikhetsoperation mellan två strängar när man skall jämföra avståndet. Någon som kan förklara hur det fungerar?
Vilket programmeringsspråk?
Jag vet inte vilket programmeringsspråk du använder, men om <,>,= aldrig kan inträffa samtidigt och likhet endast inträffar om städerna har samma namn så kommer checken stad1<stad2 göra det önskade eftersom om stad1<stad2 så kan inte stad2<stad1 därmed kommer bara avståndet hämtas en gång
Om du har != så kommer du inte att kunna stoppa in några avståndsdata alls.
Jämförelse fungerar på strängar också, alfabetisk ordning. Om du har två strängar så vet du att den ena kommer före den andra i bokstavsordning, men inte tvärtom. Det utnyttjar man här.
(Parveln sa redan en del av detta.)
Tendo skrev:Vilket programmeringsspråk?
Någon sorts SQL.