[mysql] Trasliga sql frågor vs tommas poster

Permalänk
Medlem

[mysql] Trasliga sql frågor vs tommas poster

Tjena!

Har en liten fråga här. Håller på med ett ganska stort projekt nu, och undrar vad ni tror blir mest effektivt.

Sitter i den sitsen där jag behöver ha en ganska flexibel tabell som bilderna sparas i. Då menar jag sökvägen till bilden.

Poängen är att vissa av bilderna kommer att kräva endel information om bildens namn medans andra inte behöver det. För att undvika en massa tomma rader för de bilder som inte har något namn så har jag istället länkat ihop tabellen bilder med tabellen bilder_info.

Nästa steg är att vissa av bilderna med info även kommer att inehålla information om vilken teknik bilden har tecknats med. Och jag har därför skapat en till tabell som heter bilder_teknik som har en relation till bilder_info.

Detta kommer ju att leda till en lite småkrånglig sql fråga, och kanske därför mer belastning för servern. Sidan ifråga kommer att få ett ganska högt besökarantal och därför är det viktigt att fåner belastningen så mycket som möjligt

Så min fråga är därför hur märkbar skillnaden blir med lite mer invecklade sql frågor. Skulle ju självklart gå att trycka ihop iallafall bild_info och bild_teknik, men därmed få en lite sämre databas, efterssom det kommer att leda till endel tomma poster.

Vad hade ni prioriterat i det här fallet? Och hur mycket extra kräver det att plocka bild_teknik genom fyra tabeller som det kommer att bli i det här fallet?

medlem_bilder -> bilder -> bild_info ->bild_teknik

EDIT: Kom precis på att man skulle kunna länka alla tabellerna till medlem_bilder försig ochså. Om man spar ner bildens id i både bilder, bild_info och bild_teknik... Det kanske är smartare. Vad tror ni om det? Är grymt trött i skrivande stund, så något av det jag har skrivit kan mycket väl vara ganska korkat. Men vill gärna ha tips och ideer gällande detta.

/Tomas

Visa signatur

//Toombass

Permalänk
Medlem

SQL-frågan är inte alls speciellt knepig

SELECT b.adress, bi.*, bit.* FROM bilder b, bild_info bi, bild_info_teknik bit WHERE b.id = 5 AND bi.id=5 AND bit.id = 5

(är precis påväg att sova, men jag tror frågan är vettig)

Och jag tycker du är på helt rätt spår!

Permalänk
Medlem

totoo: Tack för ditt svar, själv sitter man fortfarande uppe och knåpar. Kanske uttryckte mig lite fel i mitt inlägg, men det jag menade i första hand var ifall det blir "tyngre" för mysql att köra en sån fråga än en enklare.

Skönt att du tycker att jag är på rätt spår iallafall, jag vet att du kan det här. Tänkte även passa på att ta en till liten fråga i den här tråden när jag endå är igång. Fast detta är snarare en "försäkra mig om att jag har rätt" fråga. Vill inte upp upptäcka att det blivit fel när siten är upp and running ;).

Hursomhelst. Anledningen till att jag har en medlemmar_bilder tabell är som jag kanske nämde i inlägget ovan att det är mer än bara medlemmar som kommer att länkas ihop med bilder, t: ex recensioner och intervjuer.

Har alltså en recensioner_bilder och en intervjuer_bilder ochså. Nu har jag iallafall lagt min refferens(vet ej om det är ett korrekt ordval) i medlemmar_bilder tabellen(visar kodsnutten här nedan för att visa vad jag menar).

medlem_id int unsigned not null references medlemmar(medlem_id), bild_id int unsigned not null primary key references bilder(bild_id)

Sen har jag lagt en refferens till bilder_info(bilder_info_id) från bilder och vidare i det mönstret. Utifrån det jag har hittat på nätet och min mysql bok så är det rätt som jag har förstått det. Men rätta mig gärna om jag har fel!

Sen när jag endå sitter här och skriver om databaser så tänkte jag höra om det är nån som känner till ett bra gratis program som man kan göra sina databasscheman grafiskt i. Blir så mycket kladd när man sitter och ritar på block.

Koden kan jag lika gärna skriva själv, men om det går att även skapa tabellerna i programmet så är det ett + i kanten.

EDIT: Kom på en fråga till nu när jag endå är igång. InnoDB kollumner skall ju användas till de tabeller som har relationer till andra tabeller. Gäller det bara den tabell som man reffererar ifrån eller även till tabellen som man reffererar till?

/Tomas

Visa signatur

//Toombass

Permalänk

Det gäller alla tabeller som ska peta på FOREIGN KEYS. (Om det var dessa du menade.)

Permalänk
Medlem

Okej! Tack för ditt svar.

Visa signatur

//Toombass