andrisp Posted November 16, 2006 Report Share Posted November 16, 2006 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 :). Link to comment Share on other sites More sharing options...
Delfins Posted November 16, 2006 Report Share Posted November 16, 2006 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 Link to comment Share on other sites More sharing options...
andrisp Posted November 16, 2006 Author Report Share Posted November 16, 2006 (edited) No wikipēdijas (http://en.wikipedia.org/wiki/Third_normal_form): ...non-key attribute cannot be transitively dependent on another non-key attribute. Remove columns that are not fully dependent upon the primary key. Pēc manas saprašanas attiecas uz 2nf. Edited November 16, 2006 by andrisp Link to comment Share on other sites More sharing options...
Delfins Posted November 16, 2006 Report Share Posted November 16, 2006 (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 November 16, 2006 by Delfins Link to comment Share on other sites More sharing options...
andrisp Posted November 16, 2006 Author Report Share Posted November 16, 2006 (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 November 16, 2006 by andrisp Link to comment Share on other sites More sharing options...
john.brown Posted November 16, 2006 Report Share Posted November 16, 2006 (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 November 16, 2006 by john.brown Link to comment Share on other sites More sharing options...
andrisp Posted November 16, 2006 Author Report Share Posted November 16, 2006 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. Link to comment Share on other sites More sharing options...
john.brown Posted November 16, 2006 Report Share Posted November 16, 2006 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.. Link to comment Share on other sites More sharing options...
Recommended Posts