Umha BDR para comics
por Kike Benlloch Castinheira / Agosto'97


Introduçom

Quando a colecçom de comics que um tem acada determinado volume, a necessidade de levar um registo racional e cómodo converte-se de feito numha necessidade imperiosa. À hora de completar séries nom deve caber dúvida de se o número 324 do "Imperioso Home Pataca" o tens ou nom.
A muita gente dá-se-lle por desenhar programas em Pascal, C, ou VBasic para este fim. Parece umha decisom bastante absurda. Tamém se pode recorrer às bases de dados tradicionais, como DBaseIV, fazer a convencional tábua bidimensional e pôr-se a entrar dados. Pero compensa?
Tendo à mam umha ferramenta tam potente e cómoda para o manejo de grandes volumes de informaçom como o SQL, desenhar umha base de dados relacional semelha o mais ajeitado. Dito e feito. Esta pequena BDR foi desenhada para SQL-Oracle num sistema System V (concretamente Solaris). É ligeiramente probável --perdão polo chiste malo-- que nom tenhas este sistema na casa. Mas isto nom representa problema. Sei que os DBases múltiples suportam SQL e que hai outras possibilidades... pero um bom conselho é que botes mam de qualquer distribuçom Linux (Slackware, RedHat, etc...) e montes de umha vez um SO com jeito na tua máquina... e logo pilha qualquer gestor SQL para Linux (MySQL, MiniSQL, Postgress, Solid, ...).


Esquema entidade-relaçom

O esquema entidade-relaçom feito a todo correr e em plam Q3~caseiro,

pero para o caso bem val.


Criaçom e descriçom das tábuas

REM ----------- Comic-Book Relational DataBase by Kike Benlloch ------------- REM Free distribution and non commercial use garanteed by the author provided REM the integrity of this file and the attached entity-relation chart REM (base.jpg) is respected. v2.0 Sep'96. Special thanks to Joey Delaro for REM bringing up a few thoughtful comments and pointing out eventual REM improvement lines. Feedback is welcomed. REM >>>>>>>>> Contact Kike Benlloch at r200557703@abonados.cplus.es <<<<<<<<< REM ------------------------------------------------------------------------- REM ************************************************************************* CREATE TABLE COPY ( TITLECODE CHAR(4) NOT NULL , ISHNUMBER CHAR(6) NOT NULL , ISHDATE DATE , IN_STOCK CHAR , PRICE NUMBER(11,5) , DIFFER NUMBER(9,4) , WRITNAME CHAR(15) , PENCNAME CHAR(15) , RETACODE CHAR(4) ) ; REM An attribute by the name of NO_COPIES (number of copies) should be added REM to this table structure if more than one copy per issue might be present REM in the stock described by this database. This means that this REM alternative model would be more business-oriented than it is without REM the presence of such NO_COPIES field. Without NO_COPIES, this is a REM one consultant library model. That is, given a certain period of time REM only one person has full access to the library because there does not REM exist a second copy of any book. REM IN_STOCK indicates whether a copy exists currently in the stock or not. REM If such information is not available, as always a NULL value should be REM inserted meaning that it's not known if the copy is in stock or not. REM DIFFER (as in DIFFERence): This figure will be positive if money was REM saved by choosing cheaper editions, and it will be negative if the REM copies were purchased through more expensive editions. Please note that REM this is a calculation based on unaccurate, subjective observations whose REM reliability depends on the purchaser's degree of experience and market REM knowledge. REM DIFFER, PRICE and all monetary attributes in this database will be REM featured in quantities of Spanish legal currency. In order to REM reliably translate this figures into dollars, the date ISHDATE REM should be beared in mind. REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ CREATE TABLE EDITS ( SND_CODE CHAR(4) NOT NULL , SND_NO CHAR(6) NOT NULL , ORIG_CODE CHAR(4) NOT NULL , ORIG_NO CHAR(6) NOT NULL ) ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ CREATE TABLE FIRM ( FIRMCODE CHAR(4) NOT NULL , FIRMNAME CHAR(25) NOT NULL , CONTACT CHAR(20) , CONTJOB CHAR(30) , ADDRESS CHAR(35) , TOWN CHAR(15) , STATE CHAR(20) , ZIP CHAR(13) , POBOX CHAR(20) , COUNTRY CHAR(20) , PHONE CHAR(15) , WEBSITE CHAR(40) , EMAIL CHAR(30) ) ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ CREATE TABLE STUDIO ( STUDCODE CHAR(4) NOT NULL , HEAD CHAR(20) ) ; REM A 'studio' is a group of artists that, as an everyday habit, mutually REM collaborate in the creative process of their colleagues' respective REM materials. This work in common is, among equals, coordinated by one of REM them. A second possibility is that the studio is run by a senior or REM important artist that directs the rest of the staff. In both cases, a REM HEAD of the studio exists. REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ CREATE TABLE TITLE ( TITLECODE CHAR(4) NOT NULL , TITLENAME CHAR(35) NOT NULL , LABELCODE CHAR(4) NOT NULL , STUDCODE CHAR(4) ) ; REM Usually a product created by a studio is not edited by the studio itself REM but by a publisher, which is a business organization not exclusively REM formed by artistic staff (while a studio is). REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ CREATE TABLE RETAILER ( RETACODE CHAR(4) NOT NULL ) ; REM A 'retailer' is a company dedicated to selling books directly to the REM final purchaser (i.e. direct-market minorist firm). REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ CREATE TABLE GROUPNM ( GROUPCODE CHAR(4) NOT NULL ) ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ CREATE TABLE LABEL ( LABELCODE CHAR(4) NOT NULL , LABELNAME CHAR(30) NOT NULL , GROUPCODE CHAR(4) NOT NULL ) ; REM A 'label' is a branch of a publishing group, usually having its own REM name, logo and certain staff members devoted to its working process. REM Quite often it is really hard to decide whether a studio with a strong REM personality and presence within a publishing house should be considered REM either a studio or a label. The approximative tendency goes like this: REM LABELs are the branches of publishing groups whose characters are not REM creator-owned (i.e. main houses such as MARVEL and DC) while STUDIOs are REM the creative staff divisions of publishing groups whose characters are REM creator-owned (i.e. independent companies such as IMAGE). Please note REM that this is just a tentative approach and that there does not exist a REM definite line separating the concepts of STUDIO and LABEL. Nevertheless, REM we can always identify the concept of 'studio' as an art-oriented team REM and on the other hand, the concept of 'label' as a business-oriented REM division. REM If the data structures representing labels and studios were to be REM compared, quite probably the most significative difference would appear REM to be that labels "hang" from a group name necessarily, while studios REM needn't. This is caused by the fact that a studio may work for several REM publishing groups, while a label cannot be separated from the group that REM it belongs to (for it is defined as a part of that group). This is also REM the reason why in the concept of 'regular title' (TITLE) both the REM information of 'creative studio behind the title' (STUDCODE) and 'label REM of a publishing group by whom the title is published' (LABELCODE) are REM included separately as the different information they represent. REM *************************************************************************

Exemplos de inserçom de dados

REM ************************************************************************* INSERT INTO GROUPNM VALUES ('DHRS'); INSERT INTO LABEL VALUES ('DHRS','DARK HORSE COMICS','DHRS'); INSERT INTO LABEL VALUES ('DHH', 'DARK HORSE HEROES','DHRS'); INSERT INTO LABEL VALUES ('LGND','LEGEND', 'DHRS'); INSERT INTO LABEL VALUES ('BLNR','BLANC NOIR', ,'DHRS'); INSERT INTO FIRM VALUES ('DHRS','DARK HORSE COMICS','JAMIE S. RICH','SUBMISSIONS EDITOR', '10956 SOUTH EAST MAIN ST','MILWAUKIE','OREGON','OR 97222',NULL,'USA',NULL, 'www.dhorse.com',NULL); REM ************************************************************************* INSERT INTO STUDIO VALUES ('CBKS','SMITH, JEFF'); INSERT INTO FIRM VALUES ('CBKS','CARTOON BOOKS',NULL,NULL,NULL,'COLUMBUS','OHIO','OH 43216', '16973','USA',NULL,'www.boneville.com',NULL); REM ************************************************************************* INSERT INTO RETAILER VALUES ('COAM'); INSERT INTO FIRM VALUES ('COAM','COMICS AMERICA','MIKE',NULL,'#10-62 SCURFIELD BLVD','WINNIPEG', 'MANITOBA','R3Y1M5',NULL,'CANADA',NULL,NULL,'archi1@delphi.com'); REM ************************************************************************* INSERT INTO TITLE VALUES ('HBWD','HELLBOY: WAKE THE DEVIL','DHRS','LGND'); REM ************************************************************************* INSERT INTO COPY VALUES ('ANMN','6','15-JUN-89','Y',140,NULL,'MORRISON','TRUOG','ICIA'); REM ************************************************************************* INSERT INTO COPY VALUES ('SVBR','2','15-MAR-97','Y',575,NULL,'GAIMAN','THOMPSON',NULL); INSERT INTO COPY VALUES ('SAND','43','15-SEP-92','Y',NULL,NULL,'GAIMAN','THOMPSON',NULL); INSERT INTO COPY VALUES ('SAND','44','15-OCT-92','Y',NULL,NULL,'GAIMAN','THOMPSON',NULL); INSERT INTO EDITS VALUES ('SVBR','2','SAND','43'); INSERT INTO EDITS VALUES ('SVBR','2','SAND','44'); REM *************************************************************************

Exemplos de consultas

REM ********** REM ******************** REM ****************************** REM **************************************** REM ***** QQQ U U EEEEE RRRR I EEEEE SSSS ***** REM ********** Q Q U U E R R I E S ********** REM *************** Q Q U U EEE RRRR I EEE SSS *************** REM ********** Q QQ U U E R R I E S ********** REM ***** QQQ Q UUU EEEEE R R I EEEEE SSSS ***** REM **************************************** REM ****************************** REM ******************** REM ********** REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 1 REM Select all data on copies, showing first the ones in stock and then the REM ones that are not. Order both groups by title code and number of issue. SELECT * FROM COPY ORDER BY IN_STOCK DESC , TITLECODE , ISHNUMBER ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 2 REM Show the total ammount of money invested in copies that are in stock. SELECT SUM ( PRICE ) FROM COPY WHERE IN_STOCK = 'Y' ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 3 REM Show the overall balance -not total- of money invested in copies that REM are in stock. SELECT SUM ( DIFFER ) FROM COPY WHERE IN_STOCK = 'Y' ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 4 REM Find out how many one-shot's are in the database. SELECT COUNT ( ISHNUMBER ) FROM COPY WHERE ISHNUMBER = '-' ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 5 REM Find all copies in which either creative part was a team. SELECT * FROM COPY WHERE ( WRITNAME = 'SEVERAL' ) OR ( PENCNAME = 'SEVERAL' ) ORDER BY TITLECODE, ISHNUMBER ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 6 REM Find all copies whose authors will not appear 'in a first look' because REM each of those copies features material from different issues of an REM earlier edition. In other words, we cannot associate one of those copies REM with one writer and one penciler because several writer/penciler teams' REM work may be featured in it. SELECT * FROM COPY WHERE ( WRITNAME = 'CHECK _EDITS_' ) ORDER BY TITLECODE, ISHNUMBER ; REM the same would be achieved by using ( PENCNAME = 'CHECK _EDITS_' ) REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 7 REM Check that no mistake was done when typing data, in terms of each copy REM being present or not in the database, or simply that information is REM unknown. No fourth possibility accepted. SELECT * FROM COPY WHERE ( IN_STOCK <> 'Y' ) AND ( IN_STOCK <> 'N' ) AND ( IN_STOCK IS NOT NULL ) ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 8 REM Imagine that the result of the previous query was not the expected REM 'no rows selected' and correct the mistake/s. DELETE COPY WHERE ( IN_STOCK <> 'Y' ) AND ( IN_STOCK <> 'N' ) AND ( IN_STOCK IS NOT NULL ) ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 9 REM List all the available titles in which one of the Kuberts has worked. SELECT DISTINCT TITLECODE FROM COPY WHERE PENCNAME IN ( 'KUBERT, ADAM' , 'KUBERT, ANDY' , 'KUBERT, JOE' ) ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 10 REM Same query as previous, but imagine that you don't know exactly how the REM names are stored (either first name, last name or the other way around; REM includding middle name or not, etc ...) SELECT DISTINCT TITLECODE FROM COPY WHERE PENCNAME LIKE '%KUBERT%' ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 11 REM Usually the date of entrance of a copy into the system is typed as the REM fifteenth of such month of such year. Check if by any reason there is REM any copy with a different day of the month in the database. SELECT * FROM COPY WHERE ( ISHDATE NOT LIKE '15%' ) ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 12 REM List code and number of all issues purchased prior to February 23rd, REM 1988. SELECT TITLECODE, ISHNUMBER FROM COPY WHERE ( ISHDATE < '23-FEB-88' ) AND ( IN_STOCK = 'Y' ) ORDER BY TITLECODE, ISHNUMBER ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 13 REM List code and number of all issues _edited_ between January and March of REM 1992 -both months included in the query-. SELECT TITLECODE, ISHNUMBER FROM COPY WHERE ( ISHDATE BETWEEN '15-MAR-92' AND '15-JUN-92' ) AND ( IN_STOCK = 'N' ) ORDER BY TITLECODE, ISHNUMBER ; REM When a copy is part of the stock, that means that it was purchased. In REM that case, ISHDATE is the date of adquisition, the day in which that REM copy entered the library. On the contrary, if IN_STOCK is 'N' that means REM that ISHDATE indicates the date in which the book was edited. Here lies REM the importance of IN_STOCK keeping either a 'Y' or 'N' value -but none REM other-: in case IN_STOCK is NULL, so should ISHDATE be, for any date REM contained in it would have a confusing effect on the consultant because REM of its lack of definition. REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 14 REM List all creative people who worked on the books detailed in the REM current database. SELECT DISTINCT WRITNAME FROM COPY WHERE ( WRITNAME <> 'SEVERAL' ) AND ( WRITNAME <> 'CHECK _EDITS_' ) UNION SELECT DISTINCT PENCNAME FROM COPY WHERE ( PENCNAME <> 'SEVERAL' ) AND ( PENCNAME <> 'CHECK _EDITS_' ) ORDER BY 1 ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 15 REM Compare how many titles there are and how many are named differently. SELECT 'NUMBER OF TITLES: ' , COUNT ( DISTINCT TITLECODE ) FROM TITLE UNION SELECT 'NUMBER OF TITLES NAMED DIFFERENTLY: ', COUNT ( DISTINCT TITLENAME ) FROM TITLE ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 16 REM Select all titles on which information is stored in the current data REM base and order them by their name. SELECT * FROM TITLE ORDER BY TITLENAME ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 17 REM Find all titles created and/or edited by a studio. SELECT * FROM TITLE WHERE STUDIO IS NOT NULL ORDER BY TITLECODE ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 18 REM Select all firms on which information is stored in the current data REM base and order them by their name. SELECT * FROM FIRM ORDER BY FIRMNAME ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 19 REM Select all studios on which information is stored in the current data REM base and order them by their code. SELECT * FROM STUDIO ORDER BY STUDCODE ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 20 REM Select all retailers on which information is stored in the current data REM base and order them by their code. SELECT * FROM RETAILER ORDER BY RETACODE ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 21 REM Select all editor groups on which information is stored in the current REM data base and order them by their code. SELECT * FROM GROUPNM ORDER BY GROUPCODE ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 22 REM Select all publishing firm's labels on which information is stored in REM the current data base and order them by their code. SELECT * FROM LABEL ORDER BY LABELCODE ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 23 REM Find out which labels the DC editors divide their titles into. SELECT LABELNAME FROM LABEL WHERE GROUPCODE = 'DC' ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 24 REM List the total amounts spent per month, ordered by date. SELECT SUM ( PRICE ) , ISHDATE FROM COPY ORDER BY ISHDATE WHERE IN_STOCK = 'Y' GROUP BY ISHDATE ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 25 REM Find out how much money was spent in purchases to each retailer. SELECT SUM ( PRICE ) , RETACODE FROM COPY WHERE IN_STOCK = 'Y' GROUP BY RETACODE ; REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM QUERY 26 REM List all the 'XFIL' issues existing in the DB, ordered according to the REM original numeration, each of the existing issues belonging to the REM original edition or to a foreign or later edition. SELECT TITLECODE , ISHNUMBER FROM COPY WHERE ( TITLECODE = 'XFIL' ) AND ( IN_STOCK = 'Y' ) UNION SELECT TITLECODE , ISHNUMBER FROM COPY ALIAS WHERE ( TITLECODE = 'XFIL' ) AND ( IN_STOCK = 'N' ) AND EXISTS ( SELECT * FROM EDITS ALIAS_2 WHERE ALIAS_2 . ORIG_CODE = ALIAS_1 . TITLECODE AND ALIAS_2 . ORIG_NO = ALIAS_1 . ISHNUMBER AND 'Y' = ( SELECT IN_STOCK FROM COPY WHERE TITLECODE = ALIAS_2 . ORIG_CODE AND ISHNUMBER = ALIAS_2 . ISHNUMBER ) ) ORDER BY 2 ; REM REM graphic example REM ~~~~~~~~~~~~~~~ REM COPY table: EDITS table: REM +------------------------------+ +-------------------------------+ REM | ... | | ... | REM | [ XFIL | 416 | Y | ... ] | | | REM | ... | | | REM | [ XFAA | 31 | Y | ... ]<----<----<---+--<---+ | REM | | | ^ ^ REM | ... | | [ XFAA | 31 | XFIL | 417 ] | REM | | | ^ ^ | REM | [ XFIL | 417 | N | ... ]---->---->---->---->---->-+-->---+ | REM | ... | | ... | REM +------------------------------+ +-------------------------------+ REM REM REM XFIL,416 is included in the answer to the query following the REM conditions specified in the first part of the UNION. REM XFIL,417 is included in the answer to the query following the REM conditions specified in the second part of the UNION: REM there exists a record in EDITS such that there is REM a present issue that edits XFIL,417 REM REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

E mesmo um exercício proposto :-)

REM QUERY 27 REM List all the materials featured more than once in the library. HINT REM You should check which books edit previously released material, and REM then see which of those coincide. Be careful of verifying that the REM IN_STOCK "boolean flag" has a YES ("Y") value. REM Example: REM --- COPY contains the following values: REM ('UNCX','232','15-AUG-88','N',NULL,NULL,'CLAREMONT','SILVESTRI',NULL); REM ('UNCX','233','15-SEP-88','N',NULL,NULL,'CLAREMONT','SILVESTRI',NULL); REM ('UNCX','234','15-SEP-88','N',NULL,NULL,'CLAREMONT','SILVESTRI',NULL); REM ('XMEA','-','15-NOV-96','Y',251.15405,NULL,'CLAREMONT','SILVESTRI','ECC'); REM --- EDITS contains the following values: REM ('XMEA','-','UNCX','232'); REM ('XMEA','-','UNCX','233'); REM ('XMEA','-','UNCX','234'); REM ************************************************************************* REM ************************************************************************* REM *************************************************************************

Modelo Entidade-Relaçom (v3.0, October 1997)


Descritores de Relaçons (v3.0, October 1997)

 

1

[ISSUE] <EDITS> [ ISSUE]

[ISSUE] <IS EDITED IN> [ISSUE]

[NÚMERO] <EDITA> [ NÚMERO]

[NÚMERO] <É EDITADO EM> [NÚMERO]

2

[ISSUE] <BELONGS TO> [TITLE]

[TITLE] <IS COMPOSED OF> [ISSUE]

[NÚMERO] <PERTENCE A> [TÍTULO]

[TÍTULO] <COMPOM-SE DE> [NÚMERO]

3

[TITLE] <IS PUBLISHED UNDER> [LABEL]*

[LABEL] <PUBLISHES> [TITLE]*

*during [EDITION PERIOD]

[TÍTULO] <É PUBLICADO BAIXO> [SELO] *

[SELO] <PUBLICA> [TÍTULO]*

*durante [PERIODO_DE_EDIÇOM]

4

[LABEL] <IS PART OF> [GROUP]

[GROUP] <OWNS> [LABEL]

[SELO] <É PARTE DE> [GRUPO]

[GRUPO] <POSSUE> [SELO]

5

[CREATOR] <IS A MEMBER OF> [STUDIO]*

[STUDIO] <IS FORMED BY> [CREATOR]*

*during [MEMBERSHIP_PERIOD]

[CRIADOR] <É MEMBRO DE> [ESTUDO]*

[ESTUDO] <ESTÁ FORMADO POR> [CRIADOR]*

*durante [PERIODO_PERTENÇA]

6

[CREATOR] <MANAGES> [STUDIO]*

[STUDIO] <IS MANAGED BY> [CREATOR]*

*during [MANAGEMENT_PERIOD]

[CRIADOR] <DIRIGE> [ESTUDO]*

[ESTUDO] <É DIRIGIDO POR> [CRIADOR]*

*durante [PERIODO_DE_DIRECÇOM]

7

[ISSUE] <CREDITS> [CREATOR]*

[CREATOR] <IS CREDITED IN> [ISSUE]*

*on [LABOUR]

[NÚMERO] <ACREDITA A> [CRIADOR]*

[CRIADOR] <É ACREDITADO EM> [NÚMERO]*

*por [LABOR]

8

[ISSUE] <PURCHASED FROM> [RETAILER]

[RETAILER] <SELLS> [ISSUE]

[NÚMERO] <É ADQUIRIDO DE> [MINORISTA]

[MINORISTA] <VENDE> [NÚMERO]


Synapsis Home Page Mais artigos de ciência de computadores Mais artigos em galego-português