Jag har har nyligen upptäckt JOIN i mysql men mina semantiska konvensioner går inte alltid så bra ihop med de som funkar bäst i detta sammanhang.
När det gäller främmande nycklar: För att man skall kunna använda sig av USING så måste primärnyckeln och den främmande nyckeln i fråga båda ha samma namn.
Innan har jag alltid döpt primärnyckeln till något (förslagsvis "id" om det är en auto increment, numerisk nyckel). och den främmande nyckeln i den andra tabellen till tabellnamn_id, där "tabellnamn" är namnet på tabellen nyckeln kommer ifrån. Detta känns ganska logiskt och bra, men är det kanske dags att tänka om?
Sen när det gäller övriga fältnamn. Jag har alltid strävat efter en så snygg och logisk struktur som möjligt. Om vi har en tabell som heter "user", och skall döpa ett fält i tabellen där användarens namn sparas, döper jag detta till "name" och inte user_name, email, och inte user_email osv. Tycker det känns lite redundant att att döpa fält i tabellen med tabellprefix och dessutom känns ju "SELECT user.name FROM user"; snyggare än SELECT user.user_name;" MEN, har nu upptäkt att man stöter man på lite problem när det gäller icke unika fältnamn i vissa satser med JOIN.
Ett exempel; Tabellen "user" är kopplad till "user_buddy" och vi vill av någon anledning rada upp alla användare och deras polare. Vi använder då följande mysqlsats:
"SELECT user.name, user_buddy.name FROM user LEFT JOIN user_buddy ON user.id = user_buddy.user_id;"
Resultatet av detta blir att vi får två kolumner men samma namn, name och name, viket ju inte är så lyckat. För att undvika detta går det ju att ändra ovanstående query till:
"SELECT user.name AS user_name, user_buddy.name AS buddy_name FROM user LEFT JOIN user_buddy ON user.id = user_buddy.user_id;"
Men i det här fallet är det kanske bättre att döpa fälten till unika värden från börgan? Dessutomkan man ju som sagt köra med "USING(user_id)", istället för ON "user.id = user_buddy.user_id" om primärnyckeln man döpt både primär och främmande nyckel "user_id".
Nu när jag skrivigt av mig lite så känns som att det blev rätt sjävklart att jag kanske skall anpassa mig trots allt, men nu när jag endå bemödat mig med att skriva detta så...
Kanske finns det mer språkliga konvensioner som är bra att känna till, eller andra lösningar på ovanstående problem? I vilket fall som helst är det intressant att höra era åsikter.