A számítástechnikában a rekord (más néven struktúra, összetett adat) egy alapvető adatszerkezet. Egy adatbázisban vagy táblázatban a rekordokat általában soroknak nevezik.

A rekord mezők gyűjteménye, amelyek lehetnek különböző adattípusúak, általában fix számúak és sorrendben vannak elhelyezve. A rekord mezőit néha tagoknak is nevezik, különösen objektumorientált programozásban. A mezőket elemeknek is nevezhetjük, bár ez összetévesztheti a gyűjtemény elemeivel.

Például egy dátumot tárolhatunk egy rekordban, amely egy numerikus évszám mezőt, egy stringként ábrázolt hónapmezőt és egy numerikus hónapnap mezőt tartalmaz. Egy személyi rekord tartalmazhat nevet, fizetést és rangot. Egy kör rekord tartalmazhat egy középpontot és egy sugarat – ebben az esetben a központot maga is egy pont rekordként ábrázolhatjuk, amely tartalmazza az x és y koordinátákat.

A rekordok megkülönböztethetők a tömböktől azzal a jellemzővel, hogy mezőik száma a rekord definíciójában van meghatározva, és a rekordok egy heterogén adattípusok; nem minden mezőnek kell ugyanolyan típusú adatot tartalmaznia.

A rekord típus egy olyan adattípus, amely leírja az ilyen értékeket és változókat. A legtöbb modern számítógépes nyelv lehetővé teszi a programozó számára, hogy definiáljon új rekord típusokat. A definíció magában foglalja minden mező adattípusának és azonosítójának (név vagy címke) meghatározását, amelyen keresztül hozzáférhetők. A típuselméletben általában a termék típusokat (amelyeknek nincsenek mezőneveik) részesítik előnyben egyszerűségük miatt, de a megfelelő rekord típusokat tanulmányozzák olyan nyelvekben, mint például a System F-sub. Mivel a típuselméleti rekordok adatok mellett elsőrendű funkciókkal rendelkező mezőket is tartalmazhatnak, képesek kifejezni az objektumorientált programozás számos jellemzőjét.

Rekordok létezhetnek bármely tárolóeszközön, beleértve a fő memóriát és a tömegtároló eszközöket, például a mágnesszalagokat vagy a merevlemezeket. A rekordok alapvető komponensei a legtöbb adatszerkezetnek, különösen a kapcsolt adatszerkezeteknek. Sok számítógépes fájl logikai rekordok tömbje formájában van szervezve, gyakran hatékonyabbá téve azokat a nagyobb fizikai rekordokba vagy blokkokba csoportosítással.

Egy függvény vagy eljárás paramétereit gyakran úgy lehet tekinteni, mint egy rekordváltozó mezőit; és a függvénynek átadott argumentumok tekinthetők úgynevezett rekordértéknek, amelyet a híváskor a változónak rendelnek. Ezenkívül, a gyakran használt hívások implementálásához használt hívási veremben minden bejegyzés egy aktiválási rekord vagy hívási keret, amely tartalmazza az eljárás paramétereit és helyi változóit, a visszatérési címet és egyéb belső mezőket.

Egy objektum az objektumorientált nyelvekben lényegében egy rekord, amely eljárásokat tartalmaz a rekord kezelésére; és az objektumtípusok a rekordtípusok bővítése. Valójában a legtöbb objektumorientált nyelvben a rekordok csak az objektumok speciális esetei, és egyszerű adatstruktúráknak (PODS-eknek) nevezik őket az objektumoktól megkülönböztetve, amelyek OO funkciókat használnak.

Egy rekordot tekinthetünk a számítógépes analógjának egy matematikai sor bár egy sort lehet vagy nem lehet tekinteni rekordnak, és fordítva, a konvencióktól és a konkrét programozási nyelvtől függően. Hasonlóan, egy rekord típust tekinthetünk a számítógépes nyelv analógjának két vagy több matematikai halmaz Descartes-féle szorzatának, vagy az absztrakt terméktípus megvalósításának egy adott nyelvben.

Kulcsok Egy rekordnak lehet nullánál több kulcsa. Egy kulcs kifejezést vagy értéket, illetve érték halmazt képez a rekordban. Egy elsődleges kulcs egy olyan kulcs, amely egyedülálló az összes tárolt rekordon belül; csak egy ilyen kulcs létezik. Más szóval, egyetlen elsődleges kulcshoz sem lehet duplikátum. Például egy alkalmazott fájl tartalmazhat alkalmazott számot, nevet, osztályt és fizetést. Az alkalmazott szám egyedülálló lesz a szervezetben, és ez lesz az elsődleges kulcs. A tárolóeszköztől és a fájl szervezésétől függően az alkalmazott szám lehet indexelve – azaz külön fájlban is tárolódik, hogy gyorsabban lehessen keresni. Az osztály kódja nem feltétlenül egyedi; indexelve is lehet, ilyen esetben másodlagos kulcsnak vagy alternatív kulcsnak számít. Ha nincs indexelve, akkor az alkalmazott fájl teljes tartalmát át kell szkennelni az összes adott osztályban dolgozó alkalmazott listázásához. A kulcsok általában úgy vannak kiválasztva, hogy minimalizálják annak a lehetőségét, hogy több érték észszerűen leképezhető legyen egy kulcsra. Például a fizetés mezőt általában nem tekintik kulcsnak, mivel sok alkalmazottnak valószínűleg ugyanaz a fizetése van. Az indexelés egy tényező, amelyet figyelembe vesznek egy fájl tervezésekor.

Történelem bélyegkép|1880-as Egyesült Államokbeli népszámlálási lapja, amely táblázatos adatokat mutat, adatsorokkal, minden adatsor egy rekordnak felel meg, ami egyetlen személyhez tartozik. A rekord fogalma különféle típusú táblázatok és könyvelőkönyvek használatáig lehet visszavezetni, amelyek az idők kezdete óta használatosak a számvitelben. A modern rekord fogalma a számítástechnikában, jól meghatározott típusú és méretű mezőkkel, már implicit módon jelen volt a 19. századi mechanikus számológépekben, mint például a Babbage 's Analitikai motor. bélyegkép| Hollerith lyukkártya (1895) Az eredeti gépi olvasható adathordozó (ellentétben a vezérléssel) a lyukkártya volt az 1890-es Egyesült Államok népszámlálásakor: minden lyukkártya egyetlen rekordot tartalmazott. Hasonlítsuk össze az 1880-as naplóbejegyzést és az 1895-ös lyukkártyát. A rekordok jól kialakultak voltak a 20. század első felében, amikor a legtöbb adatfeldolgozás lyukkártyák segítségével történt. Általában egy adatfájl rekordja egy lyukkártyára került rögzítésre, ahol meghatározott oszlopok lettek kijelölve a különböző mezőkhöz. Általában egy rekord volt a legkisebb egység, amelyet külső tárolóból be lehetett olvasni (például lyukkártyaolvasóval, szalag vagy lemez segítségével). A lyukkártya stílusú rekordok tartalma eredetileg "egység rekordoknak" nevezték el, mivel a lyukkártyáknak előre meghatározott dokumentumhosszúságuk volt. Amikor az adattároló rendszerek fejlettebbé váltak a merevlemezek és mágnesszalagok használatával, a változó hosszúságú rekordok váltak az új szabvánnyá. Egy változó hosszúságú rekord olyan rekord, amelynek a mérete byte-okban körülbelül megegyezik a mezői méreteinek összegével. Ez nem volt lehetséges korábban, amíg nem találtak ki fejlettebb tároló hardvereket, mert minden lyukkártyának meg kellett felelnie előre meghatározott dokumentumhosszúságoknak, amelyeket a számítógép tudott olvasni, mivel akkoriban a kártyákat fizikailag be kellett adagolni egy gépbe.

A legtöbb gépi kód és a korai assembly nyelvek nem rendelkezett különleges szintaxissal a rekordokhoz, de a fogalom elérhető volt (és széles körben használták) indexregiszterek, közvetett címzés és önmódosító kód használatával. Néhai korai számítógépek, mint például az IBM 1620, hardveres támogatással rendelkezett a rekordok és mezők elhatárolásához, valamint különleges utasításokkal a rekordok másolásához.

A rekordok és mezők fogalma központi szerepet játszott néhány korai fájlrendezési és táblázatkezelő segédprogramban, mint például az IBM Report Program Generator (RPG).

olt az első elterjedt programozási nyelv, amely támogatta a rekord típusokat. és a rekorddefiníciós lehetőségei akkoriban elég kifinomultak voltak. A nyelv lehetővé teszi a beágyazott rekordok meghatározását alfanumerikus, egész és tört mezőkkel, tetszőleges méretű és pontosságúak lehetnek, valamint olyan mezőkkel, amelyek automatikusan formázzák az értéket, amit hozzárendelünk (például pénznem jelek, tizedes pontok és számjegycsoport-elválasztók beillesztése). Minden fájlhoz egy rekordváltozó van társítva, amelybe az adatok beolvasódnak vagy kiíródnak. A COBOL továbbá biztosít egy MOVE CORRESPONDING utasítást, amely a megfelelő nevek alapján hozzárendeli két rekord megfelelő mezőit.

A numerikus számításokhoz fejlesztett korai nyelvek, mint például a a FORTRAN (FORTRAN IV -ig) és az Algol 60, nem támogatták a rekord típusokat. Azonban a későbbi verziók, mint például a FORTRAN 77 és az Algol 68 hozzáadták ezeket a lehetőségeket. Az eredeti Lisp programozási nyelv is hiányzott a rekordoktól (kivéve a beépített negatív cellát), de az S-kifejezések megfelelő helyettesítést adtak. A Pascal programozási nyelv volt az első olyan nyelv, amely teljesen integrálta a rekord típusokat más alaptípusokkal egy logikailag következetes típusrendszerbe. A PL/I programozási nyelv támogatta a COBOL-stílusú rekordokat. A C programozási nyelv eredetileg a rekord koncepciót egyfajta sablonként (struct) biztosította, amelyet egy memóriaterületre lehetett alkalmazni, nem pedig egy igazi rekord adattípusként. Ez utóbbiakat végül is biztosították(a typedef deklarációval), de a két koncepció még mindig különbözik a nyelvben. A Pascal után tervezett legtöbb nyelv (például Ada, a Modula és a Java) szintén támogatta a rekordokat.

Bár a rekordokat már nem használják olyan gyakran eredeti kontextusukban (azaz kizárólag adatok tárolására szolgáló eszközként), hatással voltak az újabb objektumorientált programozási nyelvekre és relációs adatbázis-kezelő rendszerekre. Mivel a rekordok modulárisabbá tették az adatok tárolását és kezelését, alkalmasabbak a bonyolult, valós világot reprezentáló fogalmak ábrázolására, mint az alapértelmezetten nyújtott primitív adattípusok. Ez hatással volt a későbbi nyelvekre, mint például a C++-ra, a Python -ra, a JavaScript-re és az Objective-C-re, amelyek ugyanazokat a programozók moduláris aggályait célozzák meg. Ezekben a nyelvekben az objektumok lényegében rekordok, amelyekhez hozzáadódnak módszerek és öröklődés, amelyek lehetővé teszik a programozóknak az adatok viselkedésének manipulálását, nemcsak a rekord tartalmának módosítását. Sok programozó szerint a rekordok már elavultak, mivel az objektumorientált nyelvek olyan funkciókkal rendelkeznek, amelyek messze túlmutatnak a rekordok lehetőségein. Másrészt sok programozó érvel amellett, hogy a kis overhead és a rekordok használatának képessége az assembly nyelvben még mindig releváns, amikor alacsony szintű absztrakcióval programoznak. Ma a TIOBE indexen, a programozási nyelvek népszerűségét jelző mutatónál, a legnépszerűbb nyelveket valamilyen módon befolyásolta a rekordok ténye, mivel objektumorientáltak. Az SQL és az Object Query Language (Objektumlekérdezési Nyelv) nevű lekérdezési nyelvek is hatást gyakoroltak a rekordok koncepciójára. Ezek a nyelvek lehetővé teszik a programozó számára, hogy adathalmazokat, amelyek lényegében rekordok, táblákban tároljanak. Ezek az adatok azután lekérhetők egy elsődleges kulcs segítségével. Maguk a táblák is rekordok, amelyek tartalmazhatnak idegen kulcsot : egy olyan kulcsot, amely egy másik tábla adataira hivatkozik.

Tevékenységek

Új rekordtípus deklarációja, beleértve az egyes mezők pozícióját, típusát és (esetleg) nevét; Változók és értékek deklarálása adott rekordtípussal; Rekordérték felépítése adott mezőértékekből és (néha) megadott mezőnevekkel; Rekord mezőjének kiválasztása explicit névvel; Rekordérték hozzárendelése egy rekordváltozóhoz; Két egyenlőségrekord összehasonlítása; A rekord szabványos hasítófüggvény értékének kiszámítása.

Egy mező kiválasztása rekordértékből értéket ad.

Néhány nyelv lehetőséget nyújthat arra, hogy felsorolja egy rekord összes mezőjét, vagy legalább a referenciaként használt mezőket. Ez a funkció szükséges bizonyos szolgáltatások, mint például a hibakeresők, szemétgyűjtők és sorosítás implementálásához. Ehhez bizonyos mértékű típuspolimorfizmusra van szükség.

Record alaktípusokkal rendelkező rendszerekben a rekord típusú értékekkel végrehajtható műveletek közé tartozhatnak:

Új mező hozzáadása rekordhoz, az új mező értékének beállítása. Mező eltávolítása a rekordból.