~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 0969548F9497140FA21FFC40255F9099__1717618500 ✰
Заголовок документа оригинал.:
✰ Record (computer science) - Wikipedia ✰
Заголовок документа перевод.:
✰ Запись (информатика) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Record_(computer_science) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/09/99/0969548f9497140fa21ffc40255f9099.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/09/99/0969548f9497140fa21ffc40255f9099__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 18:54:35 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 5 June 2024, at 23:15 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Запись (информатика) — Википедия Jump to content

Рекорд (информатика)

Из Википедии, бесплатной энциклопедии

В информатике запись ) представляет собой (также называемая структурой , структурой или составными данными базовую структуру данных . Записи в базе данных или электронной таблице обычно называются « строками ». [1] [2] [3] [4]

Запись представляет собой набор полей , возможно, разных типов данных , обычно в фиксированном количестве и последовательности. [5] Поля записи также можно называть членами , особенно в объектно-ориентированном программировании ; поля также могут называться элементами , хотя это может привести к путанице с элементами коллекции .

Например, дата может храниться как запись, содержащая числовое поле года , поле месяца , представленное в виде строки, и числовое поле дня месяца . Кадровая запись может содержать имя , зарплату и звание . Запись Circle может содержать центр и радиус — в этом случае сам центр может быть представлен как запись точки , содержащая координаты x и y .

Записи отличаются от массивов тем, что количество их полей определяется в определении записи, а также тем, что записи представляют собой гетерогенный тип данных; не все поля должны содержать данные одного и того же типа. [6]

Тип записи — это тип данных , который описывает такие значения и переменные. Большинство современных компьютерных языков позволяют программисту определять новые типы записей. Определение включает указание типа данных каждого поля и идентификатора (имени или метки), по которому к нему можно получить доступ. В теории типов типы продуктов (без имен полей) обычно отдаются предпочтение из-за их простоты, но подходящие типы записей изучаются на таких языках, как System F-sub . Поскольку теоретико-типические записи могут содержать первоклассные поля с функциональными помимо данных типами, они могут выражать многие особенности объектно-ориентированного программирования .

Записи могут существовать на любом носителе информации, включая оперативную память и устройства хранения данных , такие как магнитные ленты или жесткие диски . Записи являются фундаментальным компонентом большинства структур данных, особенно связанных структур данных . Многие компьютерные файлы организованы как массивы логических записей , которые для повышения эффективности часто группируются в более крупные физические записи или блоки .

Параметры функции или процедуры часто можно рассматривать как поля переменной записи; и аргументы, передаваемые этой функции, можно рассматривать как значение записи, которое присваивается этой переменной во время вызова. Кроме того, в стеке вызовов , который часто используется для реализации вызовов процедур, каждая запись представляет собой запись активации или кадр вызова , содержащий параметры процедуры и локальные переменные, адрес возврата и другие внутренние поля.

Объект в объектно-ориентированном языке — это, по существу, запись, содержащая процедуры, предназначенные для обработки этой записи; а типы объектов являются развитием типов записей. Действительно, в большинстве объектно-ориентированных языков записи представляют собой всего лишь частные случаи объектов и известны как старые простые структуры данных (PODS), в отличие от объектов, использующих объектно-ориентированные функции.

Запись можно рассматривать как компьютерный аналог математического кортежа , хотя кортеж может считаться записью, а может и не считаться, и наоборот, в зависимости от соглашений и конкретного языка программирования. В том же духе тип записи можно рассматривать как аналог декартова произведения двух или более математических наборов в компьютерном языке или реализацию абстрактного типа продукта на определенном языке.

Ключи [ править ]

Запись может иметь ноль или более ключей . Ключ сопоставляет выражение со значением или набором значений в записи. Первичный ключ уникален для всех хранимых записей; существует только один из этих ключей. [7] Другими словами, ни для одного первичного ключа не может существовать дубликат. Например, файл сотрудника может содержать номер сотрудника, имя, отдел и зарплату. Номер сотрудника будет уникальным в организации и будет первичным ключом. В зависимости от носителя и организации файлов номер сотрудника может быть проиндексирован — он также сохраняется в отдельном файле для ускорения поиска. Код отдела не обязательно уникален; он также может быть проиндексирован, и в этом случае он будет считаться вторичным ключом или альтернативным ключом . [8] Если он не проиндексирован, придется сканировать весь файл сотрудников, чтобы получить список всех сотрудников определенного отдела. Ключи обычно выбираются таким образом, чтобы свести к минимуму вероятность реального сопоставления нескольких значений с помощью одного ключа. Например, поле «Зарплата» обычно не считается пригодным для использования в качестве ключа, поскольку многие сотрудники, скорее всего, будут иметь одинаковую зарплату. Индексирование — это один из факторов, который учитывается при разработке файла.

История [ править ]

Лист журнала переписи населения США 1880 года , показывающий табличные данные со строками данных, каждая из которых представляет собой запись, соответствующую одному человеку.

Понятие записи можно проследить до различных типов таблиц и регистров , используемых в бухгалтерском учете с давних времен. Современное понятие записей в информатике с полями четко определенного типа и размера уже было неявно заложено в механических калькуляторах XIX века, таких как Бэббиджа машина аналитическая . [9] [10]

Холлерита Перфокарта (1895 г.)

Первоначальным машиночитаемым носителем данных (в отличие от контрольных) была перфокарта, использовавшаяся для записей переписи населения США 1890 года : каждая перфокарта представляла собой отдельную запись. Сравните запись в журнале 1880 года и перфокарту 1895 года. Записи были широко распространены в первой половине 20-го века, когда большая часть обработки данных выполнялась с использованием перфокарт. Обычно каждая запись файла данных записывается на одну перфокарту, причем определенным полям присваиваются определенные столбцы. Как правило, запись представляла собой наименьшую единицу, которую можно было прочитать из внешнего хранилища (например, устройства чтения карт, ленты или диска). Содержимое записей в виде перфокарт изначально называлось «единичными записями», поскольку перфокарты имели заранее определенную длину документа. [11] Когда системы хранения стали более совершенными с использованием жестких дисков и магнитной ленты , записи переменной длины стали стандартом. Запись переменной длины — это запись, у которой размер записи в байтах примерно равен сумме размеров ее полей. Это было невозможно сделать до того, как было изобретено более совершенное оборудование для хранения данных, поскольку все перфокарты должны были соответствовать заранее определенной длине документов, которые мог прочитать компьютер, поскольку в то время карты нужно было физически вводить в машину.

Большинство реализаций машинного языка и ранние языки ассемблера не имели специального синтаксиса для записей, но эта концепция была доступна (и широко использовалась) благодаря использованию индексных регистров , косвенной адресации и самомодифицирующегося кода . Некоторые ранние компьютеры, такие как IBM 1620 , имели аппаратную поддержку для разграничения записей и полей, а также специальные инструкции для копирования таких записей.

Концепция записей и полей была центральной в некоторых ранних утилитах сортировки файлов и табулирования , таких как Report Program Generator (RPG) от IBM .

COBOL был первым широко распространенным языком программирования , поддерживающим типы записей. [12] и его возможности определения записей были довольно сложными в то время. Язык позволяет определять вложенные записи с буквенно-цифровыми, целочисленными и дробными полями произвольного размера и точности, а также поля, которые автоматически форматируют любое присвоенное им значение (например, вставку знаков валюты, десятичных точек и разделителей групп цифр). Каждый файл связан с переменной записи, в которую данные считываются или записываются. COBOL также предоставляет MOVE CORRESPONDING оператор, который присваивает соответствующие поля двух записей в соответствии с их именами.

Ранние языки, разработанные для числовых вычислений, такие как FORTRAN (вплоть до FORTRAN IV ) и ALGOL 60 , не поддерживали типы записей; но более поздние версии этих языков, такие как FORTRAN 77 и ALGOL 68, добавили их. В исходном языке программирования Лисп тоже отсутствовали записи (за исключением встроенной cons-ячейки ), но его S-выражения представляли собой адекватный суррогат. Язык программирования Паскаль был одним из первых языков, в котором типы записей полностью интегрировались с другими базовыми типами в логически согласованную систему типов. Язык PL/I обеспечивает записи в стиле COBOL. Язык C изначально предоставлял концепцию записи как своего рода шаблон ( struct), которые могут быть размещены поверх области памяти, а не над настоящим типом данных записи. Последние были предоставлены в конечном итоге ( typedefдекларация), но эти две концепции по-прежнему различны в языке. Большинство языков, разработанных после Паскаля (таких как Ada , Modula и Java ), также поддерживают записи.

Хотя записи больше не часто используются в их исходном контексте (т.е. используются исключительно для целей хранения данных), записи повлияли на появление новых объектно-ориентированных языков программирования и реляционными базами данных систем управления . Поскольку записи обеспечивают большую модульность в способах хранения и обработки данных, они лучше подходят для представления сложных, реальных концепций, чем примитивные типы данных , предусмотренные в языках по умолчанию. Это повлияло на более поздние языки, такие как C++ , Python , JavaScript и Objective-C , которые удовлетворяют те же потребности модульности программирования. [13] Объекты в этих языках по сути представляют собой записи с добавлением методов и наследования , которые позволяют программистам манипулировать поведением данных, а не только содержимым записи. Многие программисты сейчас считают записи устаревшими, поскольку объектно-ориентированные языки обладают возможностями, намного превосходящими возможности записей. С другой стороны, многие программисты утверждают, что низкие накладные расходы и возможность использования записей на языке ассемблера делают записи по-прежнему актуальными при программировании с низким уровнем абстракции . Сегодня самые популярные языки в индексе TIOBE , показателе популярности языков программирования, в той или иной степени подверглись влиянию рекордов из-за того, что они объектно-ориентированы. [14] Языки запросов, такие как SQL и язык запросов к объектам, также находились под влиянием концепции записей. Эти языки позволяют программисту хранить наборы данных, которые по сути являются записями, в таблицах. [15] Эти данные затем можно получить с помощью первичного ключа . Сами таблицы также являются записями, которые могут иметь внешний ключ : ключ, ссылающийся на данные в другой таблице.  

Операции [ править ]

  • Объявление нового типа записи, включая положение, тип и (возможно) имя каждого поля;
  • Объявление переменных и значений как имеющих заданный тип записи;
  • Построение значения записи из заданных значений полей и (иногда) с заданными именами полей;
  • Выбор поля записи с явным именем;
  • Присвоение значения записи переменной записи;
  • Сравнение двух записей на равенство;
  • Вычисление стандартного хеш-значения для записи.

Выбор поля из значения записи дает значение.

Некоторые языки могут предоставлять средства, перечисляющие все поля записи или, по крайней мере, поля, которые являются ссылками. Это средство необходимо для реализации определенных служб, таких как отладчики , сборщики мусора и сериализация . Это требует некоторой степени полиморфизма типов .

В системах с подтипами записей операции над значениями типа записи могут также включать:

  • Добавление нового поля в запись, установка значения нового поля.
  • Удаление поля из записи.

В таких настройках определенный тип записи подразумевает наличие определенного набора полей, но значения этого типа могут содержать дополнительные поля. Таким образом , запись с полями x , y и z будет принадлежать к типу записей с полями x и y , как и запись с полями x , y и r . Смысл в том, что передача записи ( x , y , z ) функции, которая ожидает запись ( x , y ) в качестве аргумента, должна работать, поскольку эта функция найдет все необходимые поля в записи. Многие способы практической реализации записей в языках программирования могут столкнуться с трудностями при разрешении такой изменчивости, но это центральная характеристика типов записей в более теоретическом контексте.

Присвоение и сравнение [ править ]

Большинство языков допускают присваивание между записями, которые имеют одинаковый тип записи (включая одинаковые типы полей и имена в одном и том же порядке). Однако в зависимости от языка два типа данных записи, определенные отдельно, могут рассматриваться как разные типы, даже если они имеют одинаковые поля.

Некоторые языки также могут разрешать присваивание между записями, поля которых имеют разные имена, сопоставляя каждое значение поля с соответствующей переменной поля по их позициям в записи; так что, например, комплексное число с полями, называемыми real и imag может быть назначен переменной записи 2D-точки с полями X и Y. В этом альтернативном варианте два операнда по-прежнему должны иметь одинаковую последовательность типов полей. Некоторые языки также могут требовать, чтобы соответствующие типы имели одинаковый размер и кодировку, чтобы всю запись можно было назначить как неинтерпретируемую битовую строку . Другие языки могут быть более гибкими в этом отношении и требуют только того, чтобы каждое поле значения могло быть законно присвоено соответствующему полю переменной; так что, например, короткое целочисленное поле можно назначить длинному целочисленному полю или наоборот.

Другие языки (например, COBOL ) могут сопоставлять поля и значения по их именам, а не по позициям.

Эти же возможности применимы и к сравнению двух значений записи на равенство. Некоторые языки также могут позволять сравнивать порядок ('<' и '>'), используя лексикографический порядок, основанный на сравнении отдельных полей. [ нужна цитата ]

PL/I допускает оба предыдущих типа присваивания, а также допускает структурные выражения , такие как a = a+1; где «a» — запись или структура в терминологии PL/I.

68 Выбор поля Алгола распределительного

В Алголе 68, если Pts представлял собой массив записей, каждая из которых имела целочисленные поля X и Y, можно было бы написать Y of Pts получить массив целых чисел, состоящий из Y поля всех элементов Pts. В результате заявления Y of Pts[3] := 7 и (Y of Pts)[3] := 7 будет иметь тот же эффект.

Утверждение «с» Паскаля [ править ]

В языке программирования Паскаль команда with R do S выполнит последовательность команд S как будто все поля записи Rбыли объявлены как переменные. Подобно вводу другого пространства имен в объектно-ориентированном языке, таком как C# , больше нет необходимости использовать имя записи в качестве префикса для доступа к полям. Итак, вместо того, чтобы писать Pt.X := 5; Pt.Y := Pt.X + 3 можно было бы написать with Pt do begin X := 5; Y := X + 3 end.

Представление в памяти [ править ]

Представление записей в памяти варьируется в зависимости от языков программирования. Обычно поля хранятся в памяти в последовательных позициях в том же порядке, в котором они объявлены в типе записи. Это может привести к тому, что два или более полей будут сохранены в одном слове памяти; действительно, эта функция часто используется в системном программировании для доступа к определенным битам слова. С другой стороны, большинство компиляторов добавляют поля заполнения, в основном невидимые для программиста, чтобы соответствовать ограничениям выравнивания, налагаемым машиной — скажем, поле с плавающей запятой должно занимать одно слово.

Некоторые языки могут реализовать запись как массив адресов, указывающих на поля (и, возможно, на их имена и/или типы). Объекты в объектно-ориентированных языках часто реализуются довольно сложными способами, особенно в языках, допускающих множественное наследование классов .

Самоопределяющиеся записи [ править ]

Самоопределяющаяся запись — это тип записи, который содержит информацию для идентификации типа записи и поиска информации внутри записи. Он может содержать смещения элементов; поэтому элементы могут храниться в любом порядке или могут быть опущены. [16] Информация, хранящаяся в самоопределяющейся записи, может интерпретироваться как метаданные для записи, что аналогично тому, что можно было бы ожидать найти в UNIX метаданных о файле, содержащих такую ​​​​информацию, как время создания записи и размер записи. в байтах . Альтернативно, различные элементы записи, каждый из которых включает идентификатор элемента, могут просто следовать друг за другом в любом порядке.

См. также [ править ]

Ссылки [ править ]

  1. ^ «Определения словаря информатики» . Студенты-компьютерщики . Проверено 22 января 2018 г.
  2. ^ Радвани, Тибор (2014). Системы управления базами данных . Колледж Кароя Эстерхази. п. 19. Архивировано из оригинала 23 сентября 2018 г. Проверено 23 сентября 2018 г.
  3. ^ Кахате, Атул (2006). Введение в системы управления базами данных . Пирсон. п. 3. ISBN  978-81-317-0078-5 . Проверено 23 сентября 2018 г.
  4. ^ Коннолли, Томас (2004). Решения для баз данных: пошаговое руководство по созданию баз данных (2-е изд.). Пирсон. п. 7 . ISBN  978-0-321-17350-8 .
  5. ^ Феллейзен, Матиас (2001). Как разрабатывать программы . С Прессой. стр. 53 , 60. ISBN.  978-0262062183 .
  6. ^ Папе, Тобиас; Кириличев Василий; Больц, Карл Фридрих; Хиршфельд, Роберт (13 января 2017 г.). «Структуры данных записи в рэкете: анализ и оптимизация использования» . Обзор прикладных вычислений ACM SIGAPP . 16 (4): 25–37. дои : 10.1145/3040575.3040578 . ISSN   1559-6915 . S2CID   14306162 .
  7. ^ «Добавить или изменить первичный ключ таблицы в Access» . support.microsoft.com . Проверено 01 марта 2022 г.
  8. ^ «Альтернативный ключ — FAQ по Oracle» . www.orafaq.com . Проверено 01 марта 2022 г.
  9. ^ Бромли, Аллан (октябрь 1998 г.). «Аналитическая машина Чарльза Бэббиджа, 1838 год» . IEEE Анналы истории вычислений . 20 (4): 29–45. дои : 10.1109/85.728228 . S2CID   2285332 . Проверено 23 сентября 2018 г.
  10. ^ Суэйд, Дорон. «Автоматические вычисления: Чарльз Бэббидж и вычислительный метод» . Резерфордский журнал . Проверено 23 сентября 2018 г.
  11. ^ Эдвин Д. Рейли; Энтони Ралстон; Дэвид Хеммендингер, ред. (2003). Энциклопедия информатики (4-е изд.). Чичестер, Великобритания: Wiley. ISBN  978-1-84972-160-8 . OCLC   436846454 .
  12. ^ Себеста, Роберт В. (1996). Концепции языков программирования (Третье изд.). Аддисон-Уэсли Паблишинг Компани, Инк. с. 218 . ISBN  0-8053-7133-8 .
  13. ^ Ливенс, Гэри Т.; Вейль, Уильям Э. (1990). «Рассуждения об объектно-ориентированных программах, использующих подтипы» . Материалы Европейской конференции по объектно-ориентированному программированию по системам, языкам и приложениям объектно-ориентированного программирования - OOPSLA/ECOOP '90 . Нью-Йорк, Нью-Йорк, США: ACM Press. стр. 212–223. дои : 10.1145/97945.97970 . ISBN  0-201-52430-9 . S2CID   46526 .
  14. ^ «Индекс: Компания по обеспечению качества программного обеспечения» . TIOBE.com . Проверено 01 марта 2022 г.
  15. ^ «Что такое реляционная база данных (СУБД)?» . Оракул . Проверено 28 февраля 2022 г.
  16. ^ Краймер, Мартин Р. «Руководство разработчика приложений контроллера ввода-вывода (IOC) EPICS» . Аргоннская национальная лаборатория . Проверено 25 ноября 2015 г.
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 0969548F9497140FA21FFC40255F9099__1717618500
URL1:https://en.wikipedia.org/wiki/Record_(computer_science)
Заголовок, (Title) документа по адресу, URL1:
Record (computer science) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)