Kom ihåg mig?

MySQL, multipurpose kolumner istället för enskilda

 
Ämnesverktyg Visningsalternativ
Oläst 2012-09-15, 23:34 #1
JesperA JesperA är inte uppkopplad
Medlem
 
Reg.datum: Jul 2008
Inlägg: 214
JesperA JesperA är inte uppkopplad
Medlem
 
Reg.datum: Jul 2008
Inlägg: 214
Standard MySQL, multipurpose kolumner istället för enskilda

Japp, luddig rubrik men visste inte hur jag skulle beskriva det.


Jag har en litet motorcommunity sen några år tillbaka, inget seriöst, mest för att ha något att göra och testa lite olika saker.

Sitter nu och planerar att göra ett marketplace där folk kan sälja allt i motorväg i kategorierna: bilar, husbilar, motorcyklar, mopeder, fyrhjulingar, lastbilar osv osv.

Så jag satt och planerade databasens struktur ända tills det gick lite väl överstyr, varje kategori har ju någon form av extra information, tex miltal, årsmodell osv.

Så nyss satt jag och kladdade databasstrukturen på ett papper:

kolumnnamn (kolumntyp, längd, exempel)
...
...
ad_modelyear (smallint, 4, etc "2012")
ad_mileage (tinyint, 2, etc "30" som översätts till "1000-1499")
ad_gearbox (tinyint, 2, etc "1" som är "Manuell")
ad_fuel (tinyint, 2, etc "2" som är "Diesel")
ad_length (tinyint, 2, etc "2" där siffran är i meter, unikt för husvagnar)
ad_beds (tinyint, 2, etc "4" där siffran är antalet sängplatser, unikt för husvagnar)
ad_boogie (tinyint, 2, etc "2" där siffran är 1 för ja, 2 för nej osv, unikt för husvagnar)
osv osv
...
...


Om jag skall hålla på så och göra en ny kolumn för varenda unik sak för extra informationen för en viss kategori så kommer det ju bli en jädra massa kolumner.

Tex, ovan gjorde jag ett exempel på 7st kolumner, men egentligen är det bara 4 "unika" kolumner som behövs egentligen.

Tex kategorin "Bilar" behöver bara ad_modelyear, ad_mileage, ad_gearbox, ad_fuel och då kommer ju ad_length och ad_beds, ad_boogie kolumnerna stå tomma när någon skapar en annons för bilar, vilket känns lite onödigt.

Och för kategorin "Husvagnar" gäller samma sak som bara behöver ad_modelyear, ad_length, ad_beds, ad_boogie, då står ju ad_mileage, ad_gearbox och ad_fuel kolumnerna tomma.

Blir ju sjukt i framtiden när man lägger till ännu fler kolumner för tex "Karosstyp" osv.


Så jag funderar på om jag skall köra om kolumnerna så dom används till olika saker beroende på vilken kategori det gäller.

Tex (ei = extra information)

ad_ie1 (smallint, 4)
ad_ie2 (tinyint, 2)
ad_ie3 (tinyint, 2)
ad_ie4 (tinyint, 2)

Så i kategorin bilar används dom i denna ordningen:
ad_modelyear ersätts med ad_ie1
ad_mileage ersätts med ad_ie2
ad_gearbox ersätts med ad_ie3
ad_fuel ersätts med ad_ie4

Och för kategorin husvagnar:
ad_modelyear ersätts med ad_ie1
ad_length ersätts med ad_ie2
ad_beds ersätts med ad_ie3
ad_boogie ersätts med ad_ie4


Så nu är det totalt 4 kolumner för "Extra information" istället för 7st. Och om nu kategorin "Fyrhjuling" får 4 unika kolumner så skulle det på "gamla" sättet bli 11 kolumner, istället för 4.


Har suttit i ett par timmar och försökt komma på någon nackdel med detta, men hittar bara positiva saker:
Mindre databas, mindre antalet kolumner, lättare sök query (behöver inte lika många AND/OR) osv osv.

Eller iofs, en nackdel är ju att man omedelbart vet vad ad_beds innebär, men är ju bara att skriva en liten dokumentation så man håller koll på vad ad_ieX används för för respektive kategori.

Så ja, nämn gärna någon nackdel eller något annat förslag på hur ni minimerar antalet kolumner.

Senast redigerad av JesperA den 2012-09-15 klockan 23:37
JesperA är inte uppkopplad   Svara med citatSvara med citat
 


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 20:25.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017