MZM Posted March 17, 2004 Report Share Posted March 17, 2004 Problēma: ir divas tabulas A un B. Tabulas A ierakstam var piederēt neierobežots skaits ierakstu tabulā B un pretēji (tabulas B ierakstam var piederēt neierobežots skaits ierakstu tabulā A). Vajaga izdomāt efektīvu prijomu kā no tabulas B iehavot tabulas A ntajam ieraxtam piederošos tabulas B ieraxtus un pretēji (B tabulas ieraxtam piederošos A tabulas ieraxtus). Inetā piemēros parasti dotā operācija ir tikai 1 virziena (A var piederēt daudzi B), bet man vajag, ka A "n" var piederēt visi B, A "n+1" tie paši B un arī pretējā virzienā. Ārpus MySQL šo problēmu varētu atrisināt izmantojot masīvu ar A kolonām un B rindām atbilstošos krustpunktos ieliekot 0 vai 1, bet MySQL tabula != masīvs :( Googlei arī nemāku pajautāt, jo nevaru īsi noformulēt jautājumu :) Protams, ka risinājumam jābūt dinamiski lietojamam, jo A un B saturs nav statisks :) Link to comment Share on other sites More sharing options...
AcidRain Posted March 17, 2004 Report Share Posted March 17, 2004 Iekš A ieliec piem ID_B, kas norādīs, kuram B tas pieder un iekš B ieliec ID_A, kuram A tas pieder. Protams A un B vajaglauku , piemēram ID, uz kuru tad tie ID_A un ID_B rādīs. Link to comment Share on other sites More sharing options...
Aleksejs Posted March 17, 2004 Report Share Posted March 17, 2004 Uztaisi tabulu C, kura satur ID_A un ID_B un VIRZIENS (ja A piederība B nenozīmē B piederību A) Link to comment Share on other sites More sharing options...
MZM Posted March 18, 2004 Author Report Share Posted March 18, 2004 Vakar biju pārāk noguris, lai iedotu piemēru. Piemērs (tā kā MySQL šobrīd nau pa rokai, var būt neprecīza sintakse): Tabula A: create table A (id int(14) auto_increment primary key, os varchar(25)); insert into table A (os) values ("Window$"); insert into table A (os) values ("Linux"); insert into table A (os) values ("BSD"); Tabula B: create table B (id int(14) auto_increment primary key, arch varchar(25)); insert into table A (arch) values ("i386"); insert into table A (arch) values ("ppc"); insert into table A (arch) values ("alpha"); Pēc apsekošanas tika iegūti dati, ka 1) uz i386 iet win, lin un bsd; 2) uz ppc iet lin un bsd; 3) uz alpha iet lin un bsd. Kā to saglabāt datu bāzē tā, lai ātri varētu noskaidrot : A) uz kādām arch iet konkrētā OS; B) kādas OS iet uz konkrētās arch. Kā redzams no piemēra, vienam ieraxtam iekš A var atbilst vairāki iekš B un otrādi; Būtu labi, ja piedāvātais risinājums būtu ātrs, jo reālajā dzīvē A un B var saturēt vairākus tūkstošus ieraxtu; Risinājumam vajadzētu būt flexiblam -> ja nu nopērk sparc ar solaris ;) Incē tikai teorija, gan jau ar implementāciju tikšu galā (varbūt) ;) TNX par jebkādām idejām/manuāliem/RTFM'iem ;) Link to comment Share on other sites More sharing options...
Aleksejs Posted March 18, 2004 Report Share Posted March 18, 2004 Manuprāt, risinājums ir tieši tāds, kādu piedāvāju - trešā tabula. Tavā gadījumā pat nevajag kolonnu virziens, jo, ja teiz uz i386 iet solaris :D, tad viena no solaris platformām ir i386. attiecīgi varam kolonnas nosaukt os_ID un arch_ID. SELECT A.os FROM A, C WHERE C.os_ID = A.id AND C.arch_ID = {tevi interesējošās arhitektūras ID} līdzīgi darbojas pretējā virzienā. Link to comment Share on other sites More sharing options...
trinklins Posted March 18, 2004 Report Share Posted March 18, 2004 Uztaisi tabulu C, kura satur ID_A un ID_B un VIRZIENS (ja A piederība B nenozīmē B piederību A) nu reku ir vienkārši un ģeneāli. :P Link to comment Share on other sites More sharing options...
MZM Posted March 19, 2004 Author Report Share Posted March 19, 2004 Tiešām viss ģeniālais ir vienkāršs. Sajutos stulbs, ka gribēju izgudrot no jauna lielgabalu zvirbuļu šaušanai ;) Tikai kuram man tagad aliņš jāuzsauc? Link to comment Share on other sites More sharing options...
Aleksejs Posted March 19, 2004 Report Share Posted March 19, 2004 uzmini nu :P :D Link to comment Share on other sites More sharing options...
MZM Posted April 5, 2004 Author Report Share Posted April 5, 2004 uzmini nu :P :D Vai uz Ventspils Linux dienu dosies? http://www.laka.lv/tiki/tiki-read_article.php?articleId=16 Ja jā, tad tev reāla šance to aliņu kopā ar mani izdzert ;) Link to comment Share on other sites More sharing options...
Recommended Posts