ODZYSKAĆ - RETRIEVE
Paradygmat | Tryb rozkazujący , deklaratywny |
---|---|
Rodzina | dBASE |
Zaprojektowany przez | Arden Scott |
Deweloper | Richard Moore |
Po raz pierwszy pojawiły się | 1971 |
Język implementacji | FORTRAN |
Platforma | Karta charakterystyki 940 |
Licencja | Prawnie zastrzeżony |
Pod wpływem | |
dBASE , JPLDIS , RECALL, wiele innych |
RETRIEVE to system zarządzania bazą danych (DBMS) oferowany w systemach Tymshare od sierpnia 1971. Został napisany we własnym SUPER FORTRANIE Tymshare na karcie SDS 940 . Oferował podstawową funkcjonalność jednoplikowej, nierelacyjnej bazy danych przy użyciu interaktywnego języka programowania . Jest to jeden z najwcześniejszych przykładów oprogramowania jako usługi (SaaS).
RETRIEVE był bardzo wpływowy i zrodził wiele stosunkowo bezpośrednich klonów. Program RECALL firmy Wang Laboratories na minikomputerze Wang 2200 był niemal identyczny jak RETRIEVE, do tego stopnia, że różnice zostały wyszczególnione na jednej stronie. JPL stworzył wersję znaną jako JPLDIS dla UNIVAC 1108 w 1973 roku, która również była bardzo podobna.
Wayne Ratliff , wieloletni wykonawca w JPL, został zainspirowany przez JPLDIS, aby przenieść go do IMSAI 8080, aby zarządzać swoim basenem piłkarskim , a później wypuścił go komercyjnie jako Vulcan dla CP/M w 1979 roku. Ashton-Tate licencjonowany Vulcan i ponownie wydany jako dBASE II w 1980 roku, który zapoczątkował rynek baz danych mikrokomputerów . Większość oryginalnej składni RETRIEVE pozostaje niezmieniona w dBASE i wielu klonach xBASE, które przetrwały do XXI wieku.
Historia
W 1969 Jim Ryan z Tymshare zaprojektował rozszerzoną wersję IBM System/360 H-level (258 kB) FORTRAN , dodając ciągi znaków i inne funkcje, które wykorzystywały ich systemy SDS 940 . Ryan zatrudnił Richarda Moore'a i Francka Brachera, aby opracowali go jako SUPER FORTRAN, który został uruchomiony w ich systemach w 1970 roku. Wkrótce po wydaniu SUPER FORTRAN, Arden Scott poprosił Moore'a o użycie SUPER FORTRAN do opracowania swojej wizji systemu zarządzania bazą danych (DBMS ). Pierwsza wersja była gotowa w ciągu kilku tygodni i od razu cieszyła się dużą popularnością wśród klientów Tymshare.
W latach 70. Tymshare zaczął przenosić swoje systemy z SDS na platformę PDP-10 , ostatecznie uruchamiając TOPS-10 . Doprowadziło to do podjęcia próby zbudowania całkowicie nowego silnika bazy danych dla tej platformy, znanego jako MAGNUM . MAGNUM był kompletnym silnikiem relacyjnej bazy danych i w wielu odniesieniach twierdzi się, że jest to pierwszy taki system oferowany komercyjnie, gdy został uruchomiony w październiku 1975 roku. Chociaż większość klientów Tymshare i użytkowników wewnętrznych przeszło na MAGNUM, do tego czasu RETRIEVE przeniesione na wiele platform i te wersje pozostały bardzo popularne poza firmą.
W 1970 roku Laboratorium Napędów Odrzutowych (JPL) zainstalowało trzy maszyny UNIVAC 1108 . Fred Thompson używał RETRIEVE do zarządzania bazą danych kalkulatorów mechanicznych w JPL i zdecydował się na wprowadzenie systemu we własnym zakresie, gdy pojawiły się 1108. W 1971 współpracował z programistą JPL Jackiem Hatfieldem przy produkcji JPLDIS. Hatfield opuścił JPL w 1974 roku, a projekt został przydzielony innemu programiście JPL, Jebowi Longowi, który dodał szereg funkcji.
W 1973 roku Wang 2200 został zwolniony, a pulpit minikomputer z kasetowy przechowywania. RETRIEVE został przeniesiony na tę platformę pod nazwą RECALL. Raport dla armii amerykańskiej wyszczególnił różnice na jednej stronie i stwierdził, że „różnice między tymi dwoma implementacjami są bardzo niewielkie”.
Pracując w JPL jako wykonawca, Wayne Ratliff wszedł do biurowego basenu piłkarskiego . Nie interesował się grą, ale czuł, że mógłby wygrać pulę, przetwarzając statystyki post-game znalezione w gazetach. W tym celu zaczął szukać systemu bazodanowego i przypadkiem natknął się na dokumentację JPLDIS. Użył tego jako podstawy dla portu do PTDOS na swoim zbudowanym z zestawu mikrokomputerze IMSAI 8080 i nazwał powstały system Vulcan (od Mr. Spocka w Star Trek ). Został później przeniesiony do CP/M, gdy system ten stał się niemal uniwersalny na rynku autobusów S-100 .
W 1980 roku George Tate zobaczył reklamę Vulcana sprzedaną za 49 dolarów. Zaaranżował umowę licencyjną z Ratliff, przemianował ją na dBASE II, aby brzmiała jak druga wersja, i wypuścił ją na rynek za 695 USD. System odniósł sukces, a w 1981 roku IBM zlecił port do jeszcze niewydanego PC DOS . Był to ogromny sukces, jeden z trzech dużych pakietów, wraz z Word Perfect i Lotus 1-2-3, które stanowiły odpowiednik pakietu biurowego na wczesnym rynku DOS.
Opis
Podstawowe operacje
RETRIEVE była nierelacyjną bazą danych, a koncepcja ta została wprowadzona dopiero w 1970 roku. Bazy danych RETRIEVE zawierały pojedynczą tabelę zapisaną w jednym pliku, który zazwyczaj używał skróconej nazwy bazy danych jako nazwy pliku. Struktura tabeli jest definiowana podczas tworzenia bazy danych, umożliwiając wprowadzanie pól znaków, liczb całkowitych lub dowolnych danych liczbowych. Baza danych mogła zawierać maksymalnie 98 pól, maksymalnie 72 znaki na pole, a suma dla jednego wiersza wynosiła 768 znaków lub 256 słów. Nazwy pól musiały zaczynać się od litery i mogły zawierać dodatkowe litery, cyfry, kropkę i znak @, łącznie maksymalnie 31 znaków.
System był interaktywny, korzystając z wiersza poleceń w systemie do interakcji z użytkownikiem. Na przykład, aby uruchomić nową bazę danych, użytkownik musiałby wpisać CREATE
w wierszu poleceń, który następnie odpowiedziałby, prosząc użytkownika o wpisanie nazwy bazy danych, a następnie pytając o definicje pól. Pusty wiersz zatrzymuje ten proces i wysyła go do trybu wprowadzania danych, umożliwiając wprowadzanie wierszy. Każdy krok tej operacji można usunąć, podając dane w oryginalnym poleceniu, na przykład po wpisaniu CREATE EMPLOYEES
zamiast CREATE
, system nie będzie już pytał o nazwę pliku.
Istniały trzy formaty plików baz danych, które można było określić podczas CREATE
, normalny format znakowy SYMBOLIC
, BINARY
który zapisywał liczby w ich 24-bitowych wewnętrznych formatach i SCRAMBLED
szyfrował plik hasłem podanym przez użytkownika.
Istniejące bazy danych zostały załadowane za pomocą LOAD
lub BASE
(były równoważne). Dane były zapisywane w miarę ich zmiany, ale było też SAVE
polecenie wypisania danych (lub ich zaznaczeń) do plików płaskich. QUIT
opuścił system i powrócił do podstawowego systemu operacyjnego.
Pobieranie danych
Po zdefiniowaniu i wypełnieniu bazy danych lub załadowaniu istniejącej, dane można było wyświetlić za pomocą LIST
. Bez żadnych parametrów wydrukował wszystkie rekordy w kolejności ich wprowadzania, ich „RECNO”, które było wydrukowane na początku linii. Można również podać listę pól, aby wybrać i zmienić kolejność pól na wydruku, np LIST EMP.NUM,NAME,SALARY
. . PRINT
Oświadczenie pracował niemal identycznie, różnią się tylko tym, że nie wydrukować RECNO na początku linii. FAST
był podobny do PRINT
, ale tłumił również nagłówki pól.
Poszczególne rekordy można było wybierać za pomocą „systemu adresowania numerów rekordów”, który był dołączony do LIST
lub PRINT
. Był to elastyczny format, który pozwalał na określenie obu pojedynczych RECNO oddzielonych przecinkami lub zakresów z dwukropkami, na przykład, 1,7:20,50 PRINT
aby wydrukować rekordy 1, wszystko od 7 do 50, a następnie 50. Zawierał również pseudo-rekord $
reprezentujący ostatni rekord, więc 100:$ LIST
wydrukowano wszystkie rekordy od 100.
Rekordy mogą być również wybierane przez pola spełniające określone kryteria na podstawie ich zawartości, używając FOR
składni. Aby wymienić wszystkich pracowników z pensją powyżej 40 000 dolarów, można by PRINT FOR SALARY>40000
. Ta sama składnia może być używana do wybierania pojedynczych rekordów na podstawie ich zawartości, a nie na przykład RECNO LIST FOR NAME="Bob Smith"
. RETRIEVE obsługuje wszystkie podstawowe porównania, =
, <
, >
, <=
, >=
oraz #
dla nierównych , co zostało znalezione w niektórych współczesnych BASIC-ach . Co niezwykłe, RETRIEVE zawierało również angielskie rozwinięcia tradycyjnych porównań, więc można było użyć albo SALARY>40000
lub SALARY GREATER THAN 40000
. Takie wyrażenia mogą również obejmować podstawową matematykę, w tym +
, -
, *
dla mnożenia, /
dzielenia i ↑
potęgowania. Można je dalej łączyć z wyrażeniami boolowskimi za pomocą AND
, OR
i NOT
.
Dodatkowo SUM
, COUNT
i AVERAGE
pracował podobny do LIST
lub PRINT
, w tym tych samych pojęć wyboru rekordów. Jak sama nazwa wskazuje, generują one pojedynczą wartość z powiązanymi wartościami. Na przykład COUNT FOR NAME='Bob Smith'
prawdopodobnie zwróci 1, podczas gdy AVERAGE SALARY FOR SALARY>45000
może zwrócić 42500.
Oprócz LIST
/ PRINT
/ FAST
, dalsze oświadczenie wyjście REPORT
. Działa to w podobny sposób, ale ma kilka opcji ładnego drukowania danych wyjściowych. Można go wywoływać samodzielnie lub z kwalifikatorami jak powyżej, ale kiedy jest używany, przechodzi w tryb interaktywny, który zadaje szereg pytań o to, gdzie wysłać wyjście (gdzie T jest terminalem), czy powinno być pojedyncze czy podwójne, uwzględnij nagłówki i sumy itp.
Modyfikowanie danych
Rekordy można usuwać za pomocą DELETE
instrukcji, używając tych samych selektorów rekordów lub wyrażeń pól, jak powyżej. Nowe rekordy wprowadzono za pomocą APPEND
. APPEND FIELDS
wszedł w tryb interaktywny, umożliwiający użytkownikowi wpisywanie dodatkowych rekordów pole po polu zamiast wprowadzania wartości rozdzielanych przecinkami wiersz po wierszu. APPEND FROM filename
wczytaj dane z pliku tekstowego rozdzielanego przecinkami do bieżącej bazy danych znajdującej się już w pamięci. MERGE
został wykorzystany do aktualizacji istniejących zapisów; działał podobnie jak APPEND
ładowanie do bieżącej bazy danych z innego pliku, ale w tym przypadku zawierał dodatkowy kwalifikator ON
. Na przykład, MERGE ON NAME FROM ADDRESSES
odczytałby dane z pliku ADDRESSES i poszukał w tym pliku kolumny, w której pierwszym wpisem było „NAZWA”. Następnie przetworzy plik wiersz po wierszu, szukając wpisów w bazie danych o tej NAZWIE, a następnie zaktualizuje pozostałe pola danymi z tego wiersza w polu ADRES.
RETRIEVE obsługuje dwie interaktywne metody aktualizacji istniejących rekordów CHANGE
oraz REPLACE
. REPLACE
działał podobnie do współczesnego odpowiednika SQLUPDATE
, przyjmując pewnego rodzaju wyrażenie selektora, jedno lub więcej pól i nowe wartości. Na przykład można REPLACE SALARY=SALARY*1.05 WHERE YEARS.EMP>5
. Chociaż CHANGE
ostatecznie zrobił to samo, zrobił to w trybie interaktywnym. Wywołany CHANGE
bez nowej wartości, na przykład CHANGE FOR 'Bob Smith' IN NAME
. System wydrukował ten wiersz, a następnie zezwolił użytkownikowi na edycję rekordu. Jeśli istnieje więcej niż jedna unikatowa wartość, na przykład , CHANGE FOR YEARS.EMP>5
każda wartość była drukowana w osobnym wierszu, a zmiany były wysyłane do wszystkich zgodnych rekordów. MODIFY
był zasadniczo identyczny, CHANGE
ale nie wydrukował najpierw istniejących wartości.
Sortowanie nie zostało wykonane w czasie pobierania, ale zostało zaimplementowane poprzez modyfikację bazy danych i ponowne zapisanie jej zawartości w kolejności posortowanej. Osiągnięto to za pomocą SORT BY
, a następnie do dwudziestu nazw pól. Oryginalne nieposortowane dane są zapisywane w pliku kopii zapasowej.
RESULTS TO
Modyfikator może być używany z dowolnym sprawozdania modyfikacji danych przekierować wyniki do nowej bazy danych. Na przykład APPEND FROM FEBSALES RESULTS TO CURSALES
dołączyłby dane z pliku FEBSALES do aktualnej bazy danych, a następnie zapisałby wyniki do CURSALES bez aktualizacji już otwartej bazy danych. Albo można SORT BY NAME RESULTS TO SORTEMP
.
Inne polecenia
Zawierały polecenia narzędziowe, STRUCTURE
które wyświetlały schemat bazy danych i SIZE
zwracały liczbę rekordów.
Programowanie ODBIERZ
Chociaż RETRIEVE był często używany interaktywnie, system zawierał również możliwość zapisywania list poleceń do plików, a następnie ich odtwarzania. Pliki poleceń mogą również zawierać wiele innych instrukcji „pomocniczych”, w tym TYPE 'a string'
wyprowadzanie dowolnego ciągu, HUSH
pomijanie wiersza polecenia (kropkę), TALK
ponowne włączanie monitu ECHO ON
i ECHO OFF
zatrzymywanie odtwarzania na terminalu.
Te pliki poleceń zostały uruchomione za pomocą DO filename
instrukcji z wewnętrznego wiersza poleceń lub COMMAND filename
z zewnątrz RETRIEVE, w EXECUTIVE. Jeśli skrypt zamierzał na końcu pozostawić użytkownika w RETRIEVE, można by COMMAND T
na końcu umieścić „uruchamianie” Terminala, które określało, co ma się dalej wydarzyć. Skrypty można łączyć ze sobą, COMMAND
tworząc bardziej złożone przepływy pracy.
Po uruchomieniu polecenia wewnątrz plików działały tak samo, jak gdyby użytkownik je wpisał. Oznacza to, że jeśli zostanie podana instrukcja, która normalnie wymagałaby dodatkowych danych wejściowych użytkownika, na przykład a CHANGE
bez parametrów, zostanie wywołany tryb interaktywny jak normalnie. Dzięki temu pliki poleceń mogły wywoływać dane wejściowe użytkownika, a następnie wykonywać dodatkowe instrukcje. Można np. wykorzystać REPLACE ALL WEEK.SAL=SALARY/52
do wyłapania ostatnich zmian w wynagrodzeniu, zadzwonić, CHANGE HOURS
aby system przedstawił rekord każdego pracownika i poprosić o jego tygodniowe godziny, następnie REPLACE ALL PAY=HOURS*WEEK.SAL
obliczyć tygodniową pensję dla wszystkich użytkowników, a na koniec REPORT
wysłać to wszystko do drukarki .
Porównanie z dBASE
Chociaż dzieli je prawie dekada i przeniósł się na cztery platformy, dBASE w DOS pozostał bardzo podobny do RETRIEVE. Ratliff stwierdził, że nastąpił „rodzaj przejścia od Retrieve do JPLDIS do mojego programu, który nazwałem Vulcan”. John Walker , lepiej znany z programu AutoCAD , również używał JPLDIS i stwierdził kategorycznie, że „DBase II, system bazy danych Ashton-Tate, był kopią, reimplementacją pakietu opracowanego w Jet Propulsion Laboratory o nazwie JPLDIS”.
LOAD
/ BASE
stał się USE
i kropki w nazwach pól zostały zastąpione dwukropkami, ale większość innych poleceń i funkcji pozostała niezmieniona, poza obsługą różnic w podstawowych platformach, takich jak formaty liczbowe. Na przykład oryginalny podręcznik użytkownika dBASE używa tego przykładu:
use people list
Który jest identyczny z instrukcjami w POBIERZ:
LOAD people LIST
Ogólne działanie instrukcji jest w dużej mierze identyczne w obu systemach. Podstawowe różnice w dBASE są związane z programowalnością; dBASE dodał zmienne, mógł LIST
tworzyć kolumny złożone z formuł, takich jak LIST SALARY*1.05
, i dodał znacznie szerszą gamę funkcji do manipulowania danymi, w tym funkcje do zwracania długości ciągu lub typu danych danego pola.
Uwagi
Bibliografia
Cytaty
Bibliografia
- Lammers, Susan (1986). „Wywiad z Waynem Ratliffem” . Programiści w pracy: Wywiady z 19 programistami, którzy ukształtowali przemysł komputerowy . Microsoft Press. Numer ISBN 9780914845713.- wyciąg dostępny na stronie FoxPro History.
- ODBIERZ: System pobierania informacji zarządczych (PDF) . Tymakcji. Sierpień 1971.
- Grzegorz, Nathan (2018). Tym przed... Lulu. Numer ISBN 9781387304059.
- Bloom, Howard (listopad 1976). PRZYPOMNIENIE: System wyszukiwania informacji zarządczych dla Wang 2200 (raport techniczny). Dowództwo Materiałów Armii USA.
- Podręcznik użytkownika dBASE II (PDF) (Raport techniczny). Ashton-Tate. 1983.
- Katalog wpisów dotyczących praw autorskich. Trzecia seria: 1970: styczeń-czerwiec . Biuro Prawa Autorskiego, Biblioteka Kongresu. 1972. s. 1300.
- Wiederhold, Gio (2001). „Rozdział 8: Schematy” (PDF) . Projektowanie bazy danych (wyd. 2). McGraw-Hill. s. 405-448. Numer ISBN 9780070701328.