Jump to content
php.lv forumi

Recommended Posts

Posted

Esmu sācis apgūt normālformu pamatus.

 

Piem., ir šāda struktūra priekš pasūtījumiem, kas neatbilst 3. normālformas noteikumiem.

 

Pasūtījumi:

 

id | date | user_type | user_id

 

 

Anonīmie klienti:

 

id | name

 

 

Reģistrētie klienti:

 

id | name

 

 

Kā uzrakstīt to pašu, tik lai atbilstu 3NF ?

 

PS. Vispār ceru, ka galīgi neesmu saputrojies :).

Posted

3NF = 1NF + 2NF

+

Remove columns that are not fully dependent upon the primary key.

 

primary key tev ir ID, user_type+user_id nav atkarīgi no primary key + izpilda 1nf un 2nf

 

liekas, ka ir 3nf OK

Posted (edited)

Nu ja

 

A = {id,user_id,...}

U = {user_id,user_type}

 

bet, ja uzliec key {user_type, user_id}, tad gan ir OK (ja tev tās useru tabulas atšķirās pa visiem 99%)

 

Pēc pieredzes saku, ka tas ir OK (tavs sākuma variants).. un Axapta piemēram krustam-šķērsām šitais izmantots un turklāt baigi labi viss strādā.

Tikai čakars iestājās tad, kad jāraksta kopējs Joins (uz visiem user-tipiem) [Axaptā tas arī ir perfomance jautājums, jo jātaisa N-tie selekti, bet var nokešot]...

 

Tā kā jāskatās konkrēts pielietojums, nevis NF ievērot

Edited by Delfins
Posted (edited)

Delfins, es nespēju sagremot ko tu man saki:

 

A = {id,user_id,...}

U = {user_id,user_type}

 

bet, ja uzliec key {user_type, user_id}, tad gan ir OK (ja tev tās useru tabulas atšķirās pa visiem 99%)

 

 

Es izsadomāju šādu veidu:

 

Pasūtījumi:

id | date | user_main_id

 

Klienti:

main_id

 

Reģistrētie klienti:

id | user_main_id | name

 

Anonīmie klienti:

id | user_main_id | name

 

 

Neesmu vienīgi vēl pamēģinājis, kā ir izpildīt dažādus kverijus izmantojot šādu struktūru.

Edited by andrisp
Posted (edited)

A tev tās tabulas "anonīmie klienti"/"reģistrētie klienti" tik bezjēgā atšķiras? IMHO, jēdzīgi būtu to visu divās tabulās salikt:

pasūtījumi

pas_id | user_id | date

klienti

user_id | name | is_registred

Un imho, būtu tev pilnīga laime, jo lauciņš user_type pie pasūtījumiem man izsauuc neveselīgas aizdomas. Un divas tabulas ar useriem, kas atšķiras tik pēc reģistrēts/anonīms ar. Tak, varbūt ar ko nesapratu tavā domā....

Edited by john.brown
Posted

Nejēgā atšķirīgas nav gan, bet reģistrētajiem klientiem, piem., vēl ir username un password, kā arī last access time un līdzīgi lauki, kas anonīmajiem klientiem nav. Tāpēc domāju, ka labāk tomēr būtu glabāt atsevišķi.

Posted

Domāju ne, tas lieki visu sarežģī. Ievies tabulu 'user_properties', un tad tas būtu tā:

 

table orders: id | user_id | date

 

table users: user_id | name | is_registred

 

table user_properties: user_id | password | last_access |...

 

Nu, vismaz es tā darītu..

×
×
  • Create New...