Jump to content
php.lv forumi

DB tabulas ierakstu tipu definēšana


bfj
 Share

Recommended Posts

Kāda tabula satur lauku 'type', kas tiek izmantots, lai grupētu tabulas ierakstus konkrētās grupās. Tabula var saturēt, piemēram lietotājus, kādus ziņu rakstus utml. Uzskatāmības un saprotamības labad programmā tiek ieviestas konstantes atbilstošajiem tipiem ('type' vērtībām) - tas PHP valodā, kādā C# tas varētu būt ENUM. Papildus varbūt arī var ieviest konstantes ar atbilstošiem tipu nosaukumiem (ja tie kaut kur jārāda lietotājam - teiksim, dropdownā).

Vai nepieciešams ieviest atsevišķu tabulu, kur glabājas atbilstošie tipi, uz kuriem referencējas jau minētais 'type' lauks? Būtībā, tam ir savi plusi, teiksim integritātes ziņā - atliek izdzēst tipu iekš DB un tiek izdzēsti atbilstošie ieraksti ar dzēsto tipu. Bet priekš kam atkārtoties, ja jebkurā gadījumā ieraksti pašā programmā tiek klasificēti pēc to tipiem un būtībā nekādu citu funkciju lauks 'type' nepilda.

Būtu interesanti uzzināt arī viedokli par pretēju gadījumu. Ir tabula ar tipiem, uz kuru referencējas lauks 'type' - vai būtu jāievieš konstantes? Tad nebūtu visur jāraksta, piemēram "if($type == 1)...", bet būtu daudz skaidrāk "if($type == KAUT_KAADS_IERAKSTA_TIPS)..."

 

Protams, lielā mērā tas atkarīgs no konkrētās situācijas un nepieciešamās funkcionalitātes, bet...

Kā šī foruma web programmēšanas guru risina šīs problēmas? Vai tā ir gaumes/stila preference vai ir kādi citi ieguvumi/zaudējumi?

Link to comment
Share on other sites

mefisto, normālformas te būs nevietā. Izlasot jautājumu, škiet ka vienīgais ko grib zināt ir vai sarakstu ar tipiem glabāt datubāzē.

 

Jā, kā jau teici datu integritātes nodrošināšanai labāk glabāt savā tabulā, es tā domāju.

 

Būtu interesanti uzzināt arī viedokli par pretēju gadījumu. Ir tabula ar tipiem, uz kuru referencējas lauks 'type' - vai būtu jāievieš konstantes? Tad nebūtu visur jāraksta, piemēram "if($type == 1)...", bet būtu daudz skaidrāk "if($type == KAUT_KAADS_IERAKSTA_TIPS)..."

 

Es šito īsti nesapratu. Tās konstantes, lai padarītu php skaidrāku vari ieviest jeburā gadījumā - vai tie tipi glabājas datu bāzē vai nē.

Edited by 101111
Link to comment
Share on other sites

Tas, par ko Tu runā, saucas klasifikatori :)

Var izdalīt vairāku veidu klasifikatorus:

Pēc to mainīguma/nemainīguma.

- tādus, kuri ir faktiski nemainīgi. Piemēram, dzimums. Parastā DB (kas nenodarbojas ar medicīnisko anomāliju reģistrēšanu) normāli ir 2 dzimumi, nu varbūt vēl trešais, kad nav zināms (vai arī NULL tādā gadījumā). Nav īpaši ticami, ka šīs vērtības mainīsies, maz ticam arī, ka "Sieviete" un "Vīrietis" rīt sauksies kaut kā savādāk.

- tādus, kuri laika gaitā var mainīties. Piemēram adrešu sastāvdaļas, visādas tur organizācijas nodaļas utt utjp. Tādas labāk vadīt savā tabulā un likt saites, jo tad klasifikatora izmaiņu gadījumā ir jāmodificē ieraksti datubāzē (kas ir daudz vienkāršāk un iespējams parastam lietotājam), nevis jāmodificē kods.

Pēc nepieciešamības kādus no tiem apstrādāt kaut kā īpaši.

- piemēram nepieciešamība Latvijas pilsoņus apstrādāt īpaši, t.i., programmā ir jādefinē atbilstoša konstante kurai atbilst Latvijas valstiskā piederība un šādā gadījumā personai ir atsevišķas pārbaudes un/vai biznesa nosacījumi. Šādā gadījumā parasti ir vieglāk definēt konstantes programmā, jo šīs biznesa pārbaudes ir +- predefinētas un jauna pārbaude anyway droši vien nozīmē koda maiņu.

- ja ierakstus nekā īpaši nav jāapstrādā, t.i., to apstrāde nav atšķirīga atkarībā no tipa, tad sevišķu jēgu definēt konstantes programmā neredzu, jo tas tikai ierobežo iespēju klasifikatoru koriģēt vai papildināt.

 

Gints Plivna

http://datubazes.wordpress.com

Link to comment
Share on other sites

Ja man ir tādi ierakstu tipi, no kā ir atkarīgā arī kaut kāda loģika, parasti tos nodefinēju ka konstantes kodā, ar tādu domu, ka tās nākotnē netiks mainītas, un tad turpmāk visur apejos ar konstantēm (atlasot kvērijus, pie kaut kādas loģikas).

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...