¿Cuál es la diferencia entre un "registro" y una "fila" en SQL Server?


56

Hubo una pregunta bastante inocua sobre agregar fechas y horas en SQL Server que desencadenó un debate taxonómico bastante fascinante.

Entonces, ¿cómo diferenciamos entre estos términos relacionados y cómo los usamos correctamente?

Fila

Grabar


32
Uno impulsa una nave, el otro es usado por hipsters sucios para tocar música
billinkc

1
Una publicación relacionada en SO muestra claramente que esta es una pregunta importante.
dezso

Tenga en cuenta que en Postgres y Oracle, una sola fila puede contener múltiples registros ...
a_horse_with_no_name

Respuestas:


69

Para citar a Joe Celko (no solo puede encontrar esta referencia en toda la web y en su entrada de Wikipedia , sino que incluso la verá en las camisetas en algunas conferencias):

Las filas no son registros.

Mucha gente lo señala como un idiota pedante al que le gusta humillar y abusar verbalmente de los novatos, y admito que así es como se encuentra. Pero también lo conocí en persona, incluso compartí una comida con él, y no puedo decirte cuán diferente es su personalidad de la vida real de su frente en línea. Incluso una vez lo pillé llamando registros de filas, y estaba muy avergonzado ( historia de fondo completa aquí ).

De hecho, usé esta camiseta para la conferencia PASS en Grapevine, Texas, en 2006

En cualquier caso, di lo que quieras sobre el personaje en línea del chico, pero él escribió el estándar , y el hecho de que tal autoridad dicta que hay una distinción debería decirte algo. Y por mucho que se encoja cuando alguien llama fila a un registro, también lo hacen muchos de mis colegas, que también son expertos en el mundo de SQL Server. Y aquellos de nosotros en ese campo creemos que tiene razón.

Por ejemplo, Itzik Ben-Gan, un obvio gurú de SQL Server. Aquí hay una cita de la primera lección de su Kit de capacitación (examen 70-461): Consulta de Microsoft SQL Server 2012 :

Como ejemplo de términos incorrectos en T-SQL, las personas a menudo usan los términos "campo" y "registro" para referirse a lo que T-SQL llama "columna" y "fila", respectivamente. Los campos y registros son físicos. Los campos son lo que tiene en las interfaces de usuario en las aplicaciones cliente, y los registros son lo que tiene en los archivos y cursores. Las tablas son lógicas y tienen filas y columnas lógicas.

Y, conociendo a Itzik, si le envía un correo electrónico o lo acorrala en una conferencia, con gusto le dirá lo mismo. Si llama a una fila un registro, en su opinión, no está utilizando la terminología correctamente.

Ahora, al ser una industria llena de gente de todo tipo, es probable que encuentres material (como los artículos de tecnología objetivo publicados en otra respuesta) que parecen hacer distinciones muy sutiles entre los dos, y encontrarás muchas personas en la industria considérelos iguales (conozco a varias personas en Microsoft y otras personas como Brent Ozar, que siempre lo llamarán un registro). Eso no los hace correctos, esa es solo su forma de verlo: ven lo lógico y lo físico de la misma manera (al menos en este contexto) y muchos de ellos probablemente piensan que el resto de nosotros somos solo analistas que pasan demasiado tiempo en semántica.

Como ningún proveedor puede decir "los llamarás {registros | filas}", siempre trataremos con este argumento, porque siempre habrá alguien que no obtenga lo lógico frente a lo físico, o se le haya enseñado de manera diferente, o provino de Access o fondos de programación, etc. Al igual que algunas personas dicen tomay-to y otras personas dicen tomah-to, siempre habrá una variedad de personas que van desde "son iguales" a "son completamente diferentes". "- y muchos tonos intermedios. Nuevamente, eso no hace que ninguno de ellos sea correcto, porque nadie puede ser la máxima autoridad en esto. Pero en el espacio de SQL Server, definitivamente hay una mayoría.


Dicho esto, en mi humilde opinión, cuando habla de datos que están en una tabla, lo llama fila. Cuando realiza una inserción, inserta una fila en una tabla. Cuando ejecuta una actualización, está actualizando una fila que está en una tabla. Y cuando realiza una SELECCIÓN, está recuperando filas de una tabla.

Siéntase libre de llamarlo un registro una vez que su aplicación lo haya retenido. Pero no te enfades si dices "inserté un registro" y alguien te corrige.


33

Microsoft ha dispuesto en varios lugares de su organización que el nombre oficial para el almacenamiento de datos tabulares por entrada de tabla (para acuñar una definición taxonómica que sirva a mi propio propósito) se llama "ROW". Presento como pruebas ROW_NUMBER, ROWCOUNT, ROWVERSIONy de la DataTable.Rowspropiedad, donde una DataTablees un C # representación de un objeto TSQL "mesa". En este caso, las propiedades de MSDN en su conjunto fomentan el uso de rowpara referirse a una colección de datos que es una entrada en una tabla. (tenga en cuenta que estoy tratando de evitar el uso de "registro" o "fila" para definir esto, ese es el punto de pregunta)

Sin embargo, el lenguaje es que una aplicación trata con "registros" de usuarios. Algo único sobre un registro que puede no estar directamente representado por una sola fila de almacenamiento es el hecho de que un registro puede tener subregistros. Es cierto que una tabla puede tener tablas de muchos a uno relacionadas, pero esas no se almacenan contiguamente, sino que se almacenan lógicamente relacionadas.

Entonces, una fila es lo que hay en una tabla, y un registro es lo que el desarrollador trabaja en el uso práctico.


8
Se puede argumentar que ROW es la entidad lógica, mientras que RECORD es la entidad física. Un ROW puede tener múltiples registros: uno en el índice agrupado, varios en los índices NC. Una fila que no cabe en la página se puede dividir entre el registro en la página y los registros de desbordamiento en el almacenamiento SLOB. Un valor BLOB de un campo de una fila puede abarcar varios registros TEXT en el almacenamiento BLOB. Una fila en un montón puede constar de un registro auxiliar y un registro directo. Etc etc.
Remus Rusanu

Luego, habría eliminado por completo el uso del registro de palabras del dominio de la aplicación, o habría enturbiado por completo las aguas y nos habría alejado de los términos definibles y habría entrado en el ámbito del diseño teórico de la base de datos y los detalles de implementación. Usted plantea buenos puntos, pero de la convención de aplicaciones vs bases de datos, que es donde el 80% de nuestros lectores se sentirán cómodos, mi respuesta sigue en pie, lo sostengo.
jcolebrand

44
No estoy contradiciendo tu respuesta, tal vez me equivoqué. Solo presenté cómo las cosas son vistas por el propio Motor SQL, donde la capa de acceso físico los llama 'registros' frente a la capa de procesamiento de consultas (lenguaje) que maneja 'filas'.
Remus Rusanu

Veo. Todavía siento que enturbia las aguas. Sin ofender, te lo aseguro.
jcolebrand

31

Acabo de buscar en el documento "Tecnología de la información - Lenguajes de bases de datos - SQL Parte 2: Fundación (SQL / Foundation)", que define el estándar ANSI para SQL tal como lo implementan todos los RDBMS principales.

La palabra rowse usa principalmente en todo el documento varios cientos de veces, como se esperaba.

La palabra recordsolo se usó para describir un registro similar a un registro utilizado en Oracle PL / SQL (que describe específicamente los tipos de datos de registro ADA). 6 menciones en el documento.

Creo que esto aclara esta pregunta y responde los diversos argumentos de ambos lados.


información adicional

De una copia de un (versión preliminar del último estándar SQL disponible gratuitamente), que se puede encontrar en wiscorp.com (la página Estándares SQL tiene varias otras versiones y revisiones anteriores).

Al buscar el 7IWD2-02-Foundation-2011-12.pdf , con una fecha de 2011-12-21, se revela que la fila de palabras aparece 2277 veces en el documento, mientras que el registro de palabras aparece solo 21 veces, ya sea como el verbo "record" o en algunos apéndices al final, en especificaciones de las correspondencias de tipos de datos para tipos de datos SQL y tipos de lenguaje de host (Ada, Pascal).

Además, el mismo documento tiene en la página 57 (el énfasis es mío):

4.15.1 Introducción a las tablas.

Esta subcláusula está modificada por la subcláusula 4.10.1, “Introducción a las tablas”, en ISO / IEC 9075-9.

Una tabla es una colección de cero o más filas donde cada fila es una secuencia de uno o más valores de columna. El tipo más específico de una fila es un tipo de fila. Cada fila de una tabla dada tiene el mismo tipo de fila, llamado tipo de fila de esa tabla. El valor del i-ésimo campo de cada fila en una tabla es el valor de la i-ésima columna de esa fila en la tabla. La fila es la unidad de datos más pequeña que se puede insertar en una tabla y eliminar de una tabla.

El grado de una tabla, y el grado de cada una de sus filas , es el número de columnas de esa tabla. El número de filas en una tabla es su cardinalidad. Se dice que una tabla cuya cardinalidad es 0 (cero) está vacía.

Una tabla es una tabla base , una tabla derivada o una tabla transitoria .


En lo que respecta a los DBMS que usan SQL:

¡Las filas no son registros , los campos no son columnas, las tablas no son archivos!


14

Debido a que las bases de datos relacionales rara vez se utilizan de forma aislada, para evitar confusiones entre otras partes de los sistemas, siempre me refiero a tablas, filas y columnas. En las aplicaciones de un cliente, normalmente tenemos otras construcciones, incluidos lectores de datos, conjuntos de datos, líneas de datos, tablas de datos, etc., por ejemplo, "campo" a menudo se usa para la entrada de datos en pantalla y Pascal tiene un tipo de datos de registro que es similar a una estructura en C .

A veces, en un diseño de sistema, la idea de un "Registro" puede usarse para significar algo más amplio que una sola fila. Puede ser una fila y es historia. Al igual que cuando hablamos de una fila eliminada, podríamos referirnos a una fila que simplemente está marcada como eliminada con una columna o "movida" a una tabla eliminada (y no simplemente la ausencia de una fila que, al no existir, es bastante difícil de identificar). precisar). Hay un uso más variado del término Registro.

Las tablas, filas y columnas son terminología generalmente aceptada para referirse a estas entidades en bases de datos relacionales, incluidos documentos y trabajos de Codd y Date, y la mayoría de los profesionales de bases de datos prefieren esta terminología ya que es más inequívoca.

Por lo general, no hay ambigüedad cuando se habla de filas y columnas; otras personas entienden que está hablando del diseño físico de la base de datos subyacente y no de ningún otro tipo de artefactos de un diseño lógico antes del diseño físico o de cualquier entidad del sistema emergente posterior, como los campos en un pantalla.


9

Aunque su pregunta ya está respondida muy bien. Me gustaría agregar mis puntos también. Puede ser útil hasta cierto punto. Además, mi respuesta no es específica de SQL Server

Estas palabras se usan indistintamente.

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

Column =  Field   =  Attribute    =  Attribute

table  =  File    =  Relation     =  Entity Types(or Entity Set)
  • 4 terminología buena para usar cuando aprendemos módulos ER
  • 3 uso cuando modelo relacional
  • 2 en general, DataBase books start with these terminologyporque estos son muy utilizados por personas en la vida real, también en el sistema de archivos.

El registro es la unidad básica en el sistema de almacenamiento que tiene un significado implícito. En DBMS, el recorduso de la palabra en el capítulo describe cómo las tablas de la base de datos se almacenan en bloques de disco. En DBMS a record-oriented file-systemes un sistema de archivos donde los archivos se almacenan como colecciones de registros.


9

El lenguaje sigue evolucionando. Hace algunas décadas, las personas alfabetizadas usaban "índices" en lugar de "índices" más simples. Al cambiar a "índices", eliminamos una complicación innecesaria e hicimos que el lenguaje fuera más útil. La necesidad de memorizar un plural para "índice" era pura sobrecarga: no nos ayudó de ninguna manera a comunicarnos. No se equivoquen, solía haber nazis gramaticales que disfrutaban corrigiendo a aquellos que cambiaron a "índices". Por supuesto, los nazis de gramática perdieron. Así es como la navaja de afeitar de Occam elimina detalles inútiles si todo sigue siendo relevante el tiempo suficiente.

Así que tomemos las cosas con calma: conocer la diferencia entre filas y registros no agrega absolutamente nada a nuestra capacidad para desarrollar y mantener bases de datos. Muchos profesionales excelentes usan filas y registros indistintamente, pero desarrollan sistemas increíbles. Como tal, la navaja de afeitar de Occam eventualmente eliminará la distinción, y la próxima generación tendrá que aprender un hecho menos inútil. Si, por supuesto, SQL sigue siendo relevante en ese momento.


5

Para citar el libro de CJ Date "Una introducción a los sistemas de bases de datos" " Las filas de dicha tabla pueden considerarse como los registros del archivo ... "

Entonces, para las bases de datos, es Row.


4

Respuesta corta :

  • Un registro es una pieza de datos almacenados (o recopilados).
  • Una fila es un registro almacenado linealmente.
  • Siempre que sea posible, use el término más específico.

Nota: las tablas almacenan registros linealmente y las consultas devuelven resultados linealmente

Apoyo :

Definiciones adicionales de toda la web:

  • SQL "fila" ( 1 , 2 )
  • SQL "registro" ( 1 , 2 )
  • "registro" ( 1 , 2 , 3 , 4 )
  • "fila" ( 1 , ver también 2 , 3 , 4 )
  • Fila vs Registro en StackOverflow ( 1 , 2 )

Es notable que las definiciones de SQL generalmente siguen la definición en inglés.

Si tiene una definición que cree que debería estar aquí, agréguela a los comentarios.
Estoy especialmente interesado en las definiciones del estándar SQL o la documentación de una implementación.

Se ha mencionado la cita "Las filas no son registros". Tomado fuera de contexto, esto parecería contradecir mis afirmaciones anteriores (y las de muchos profesionales de bases de datos). Pero, si lee la publicación completa ( 1 Busque la cita) de Joe Celko (también conocido como --CELKO--) queda claro que Joe Celko está tratando de corregir una idea errónea de un individuo que Joe Celko cree que surge de la persona " ... antecedentes en el procesamiento de datos con sistemas de archivos tradicionales ... ". En resumen, Joe Celko dice que las filas SQL no funcionan igual que los registros en otros sistemas. Joe Celko no está reclamando el derecho / privilegio de definir un término, está tratando de aclarar una comprensión errónea provocada por la aplicación incorrecta de los principios de un modelo de almacenamiento a otro.


3
Aprecio el trabajo y pensé que pusiste en esto. Notaré que la diferenciación de Celko tiene la intención de extraer las diferencias entre el RDBMS y los sistemas de archivo plano-COBOL que precedieron al RDBMS. Ergo, enfatiza la "fila" como parte de un esquema RDBMS y un "registro" como parte integrante de un archivo plano.
swasheck el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.