В чем разница между «записью» и «расширением» на SQL Server?

Был довольно безобидный вопрос о добавлении дат и времени в SQL Server , которые вызвали довольно увлекательные таксономические дебаты.

Итак, как мы различаем эти связанные термины и как мы их правильно используем?

Строка

Запись

52 голоса | спросил swasheck 12 Jam1000000amSat, 12 Jan 2013 02:10:11 +040013 2013, 02:10:11

8 ответов


65

Процитировать Joe Celko (вы можете найти эту ссылку не только в Интернете, но и в своей записи в Википедии , но вы даже увидите его на футболках на некоторых конференциях):

  

Строки не являются отчетами.

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

Я на самом деле носил эту рубашку на конференции PASS в Grapevine, Техас, в 2006 году

В любом случае, скажите, что вы хотите о персонаже онлайн-парня, но он написал стандарт , а тот факт, что такой авторитет диктует, что есть различие, должно вам что-то сказать. И насколько он сжимается, когда кто-то называет строку записью, так и многие мои коллеги, которые также являются экспертами в мире SQL Server. И те из нас, кто в этом лагере, считают, что он прав.

Например, Ицик Бен-Ган, очевидный гуру SQL Server. Вот цитата из самого первого урока в его учебном комплекте (экзамен 70-461): запрос Microsoft SQL Сервер 2012 :

  

В качестве примера неправильных терминов в T-SQL люди часто используют термины «поле» и «рекорд», чтобы ссылаться на то, что T-SQL называет «column» и «over», соответственно. Поля и записи являются физическими. Поля - это то, что у вас есть в пользовательских интерфейсах в клиентских приложениях, а записи - это то, что у вас есть в файлах и курсорах. Таблицы логичны и имеют логические строки и столбцы.

И, зная Итцика, если вы отправите ему электронное письмо или закроете его на конференции, он с радостью скажет вам то же самое. Если вы называете строку записью, по его мнению, вы не используете терминологию правильно.

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

Так как ни один продавец не может сказать «назовите их {records | rows}», мы будем навсегда иметь дело с этим аргументом, потому что всегда будет тот, кто не получает логического или физического, или учился по-разному, или пришли из Access или программирования фона и т. д. Так же, как некоторые люди говорят, что tomay-to и другие люди говорят, что tomah-to, всегда будет множество людей, которые варьируются от «они одинаковы» до «они», совершенно разные "- и много оттенков между ними. Опять же, это не делает их прав, потому что никто не может быть высшим авторитетом в этом вопросе. Но в пространстве SQL Server определенно есть большинство.


Тем не менее, ИМХО, когда вы говорите о данных, находящихся в таблице, вы называете это строкой. Когда вы выполняете вставку, вы вставляете строку в таблицу. Когда вы запускаете обновление, вы обновляете строку, которая находится в таблице. И когда вы выполняете SELECT, вы извлекаете строки из таблицы.

Не стесняйтесь называть это записью после того, как ваше приложение удерживает ее. Но не сердитесь, если вы скажете: «Я вставил запись», и кто-то исправил вас.

ответил Aaron Bertrand 13 Jam1000000amSun, 13 Jan 2013 04:17:53 +040013 2013, 04:17:53
32

Microsoft имеет несколько мест в своей организации, при условии, что официальное имя для хранения табличных данных для каждой записи таблицы (для монеты таксономического определения, которое служит моей собственной цели) называется «ROW». Я представляю в качестве доказательства ROW_NUMBER, ROWCOUNT, ROWVERSION и свойство DataTable.Rows, где DataTable - это представление C # объекта TSQL "table". В этом случае свойства MSDN в целом поощряют использование row для ссылки на коллекцию данных, которая является одной записью в таблице. (обратите внимание, что я пытаюсь избежать использования «записи» или «строки», чтобы определить это, что является точкой зрения)

Однако, речь идет о том, что приложение имеет дело с пользовательскими «записями». Что-то уникальное в отношении записи, которая может быть не представлена ​​непосредственно одной строкой хранения, заключается в том, что запись может иметь субректоры. Правда, таблица может иметь связанные многозначные таблицы, но они не хранятся смежно, но они хранятся логически связаны.

Итак, строка - это вещь в таблице, и запись - это то, с чем разработчик работает в практическом использовании.

ответил jcolebrand 12 Jam1000000amSat, 12 Jan 2013 02:48:56 +040013 2013, 02:48:56
30

Я только что просмотрел документ «Информационные технологии» - языки базы данных - SQL Part 2: Foundation (SQL /Foundation) », который определяет стандарт ANSI для SQL, реализованный всеми основными RDBMS.

Слово row используется в основном в документе несколько сотен раз, как и ожидалось.

Слово record использовалось только для описания записи, аналогичной записи, используемой в Oracle PL /SQL (в частности, для описания типов данных ADA). 6 упоминается в документе.

Я думаю, что это устраняет этот вопрос и отвечает на различные аргументы с обеих сторон.


Дополнительная информация

Из копии (черновик версии последнего свободно доступного) стандарта SQL, который можно найти на wiscorp.com (на странице Стандарты SQL есть несколько других более старых версий и ревизий).

Поиск 7IWD2-02-Foundation-2011-12.pdf с датой 2011-12-21 показывает, что слово row появляется 2277 раз в документе, а слово запись отображается только 21 раз, либо в виде «записи» глагола, либо в некоторых приложениях в конце, в спецификациях соответствия типов данных для типов данных SQL и типы языка хозяев (Ada, Pascal).

Более того, тот же документ находится на стр. 57 (выделено мной):

  

4.15.1 Введение в таблицы

     

Этот подпункт изменен подпунктом 4.10.1, «Ввод в таблицы», в ISO /IEC 9075-9.

     

Таблица представляет собой набор из нуля или более строк , где каждая строка представляет собой последовательность из одного или нескольких значений столбца. Наиболее конкретным типом строки является тип строки. Каждая строка данной таблицы имеет тот же тип строки, который называется типом строки этой таблицы. Значение i-го поля каждой строки в таблице - это значение i-го столбца этой строки в таблице. Строка - это наименьшая единица данных, которая может быть вставлена ​​в таблицу и удалена из таблицы.

     

Степень таблицы и степень каждой из ее строк - это количество столбцов этой таблицы. Число строк в таблице - это его мощность. Таблица, мощность которого равна 0 (ноль), называется пустой.

     

A таблица представляет собой либо базовую таблицу , производную таблицу , либо таблицу переходных процессов . . . р>


Итак, что касается СУБД, использующих SQL, то:

Строки не являются отчетами , поля не являются столбцами, таблицы не являются файлами!

ответил Philᵀᴹ 13 Jam1000000amSun, 13 Jan 2013 04:55:00 +040013 2013, 04:55:00
13

Поскольку реляционные базы данных редко используются изолированно, во избежание путаницы между другими частями систем, я всегда отношусь к таблицам, строкам и столбцам. В клиентских приложениях обычно существуют другие конструкции, в том числе datareaders, наборы данных, datarows, datatables и т. Д. Например, поле «field» часто используется для ввода данных на экране, а Pascal имеет тип данных записи, который похож на структуру на C .

Иногда в дизайне системы идея «Record» может использоваться для обозначения чего-то более широкого, чем одна строка. Это может быть ряд, и это история. Точно так же, как когда мы говорим о удаленной строке, мы можем иметь в виду строку, которая просто помечена как удаленная с помощью столбца или «перемещена» в удаленную таблицу (а не просто отсутствие строки, которая, если она не существует, довольно сложно придавить). Там только более разнообразное использование термина «Запись».

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

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

ответил Cade Roux 12 Jam1000000amSat, 12 Jan 2013 02:43:48 +040013 2013, 02:43:48
8

Хотя на ваш вопрос уже ответили очень хорошо. Я хотел бы добавить свои баллы тоже. Может быть, вы сочтете это полезным до некоторой степени. Также мой ответ не специфичен для SQL Server

Эти слова используются взаимозаменяемо.

 1          2         3              4 
--------------------------------------------------------------------
Row    =  Record  =  Tuple        =  Entity 

Column =  Field   =  Attribute    =  Attribute

table  =  File    =  Relation     =  Entity Types(or Entity Set)
  • 4 терминология, которую можно использовать, когда мы изучаем ER-модули.
  • 3 использовать, если реляционная модель
  • 2 общая сцена, DataBase books start with these terminology, потому что они широко используются людьми в реальной жизни, также в файловой системе.

Запись - это базовая единица в системе хранения, которая имеет неявное значение. В СУБД слово record, используемое в главе, описывает, как таблицы базы данных хранятся на дисковых блоках. В СУБД файловая система - это файловая система, в которой файлы хранятся в виде коллекций записей.

ответил Grijesh Chauhan 13 Jam1000000amSun, 13 Jan 2013 08:41:20 +040013 2013, 08:41:20
8

Язык продолжает развиваться. Несколько десятилетий назад грамотные люди использовали «индексы» вместо более простых «индексов». Когда мы переключились на «индексы», мы устранили ненужное усложнение и сделали язык более полезным. Необходимость запоминания множественного числа для «индекса» была чистой накладной - это никоим образом не помогало нам общаться. Не ошибитесь, раньше были грамматики нацистов, которым нравилось исправлять тех, кто переключился на «индексы». Конечно, грамматика нацистов проиграла. Таким образом, бритва Оккама устраняет бесполезные детали, если все это остается достаточно продолжительным.

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

ответил A-K 17 Jam1000000amThu, 17 Jan 2013 07:29:53 +040013 2013, 07:29:53
4

Процитировать C.J. Книга «Введение в системы баз данных» " Строки такой таблицы можно рассматривать как записи файла ... "

Итак, для баз данных это Row.

ответил Andrew Peterson 18 PMpMon, 18 Apr 2016 20:51:31 +030051Monday 2016, 20:51:31
3

Короткий ответ :

  • Запись - это часть сохраненных (или собранных) данных.
  • Строка - это запись, хранящаяся линейно.
  • Когда это возможно, используйте более конкретный термин.

Примечание: таблицы хранят записи линейно и запросы возвращают результаты линейно

Поддержка

Дополнительные определения из Интернета:

Примечательно, что определения SQL обычно следуют английскому определению.

Если у вас есть определение, которое, по вашему мнению, должно быть здесь, добавьте его в комментарии.
Меня особенно интересуют определения из стандарта SQL или документации по реализации.

Цитата была поднята: «Строки - это не записи». Из контекста это, казалось бы, противоречит моим предыдущим утверждениям (и тем, что многие специалисты по базам данных). Но если вы прочитали весь пост ( 1 Поиск цитаты) Джо Селко (aka --CELKO--) становится ясно, что Джо Селко пытается исправить неправильное представление о личности, которую, по мнению Джо Селко, возникает из-за человека" .. фоном в обработке данных с помощью традиционных файловых систем ... ». Короче говоря, Джо Селко говорит, что строки SQL не работают так же, как записи в других системах. Джо Селко не претендует на право /привилегию определения срока, он пытается прояснить понимание промаха, вызванное неправильным применением принципов одной модели хранилища к другой.

ответил Trisped 12 Jam1000000amSat, 12 Jan 2013 03:05:31 +040013 2013, 03:05:31

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132