Was ist der Unterschied zwischen einem "Datensatz" und einer "Zeile" in SQL Server?

56

Es gab eine ziemlich harmlose Frage zum Hinzufügen von Datums- und Uhrzeitangaben in SQL Server , die eine ziemlich faszinierende taxonomische Debatte auslöste.

Wie unterscheiden wir zwischen diesen verwandten Begriffen und wie verwenden wir sie richtig?

Reihe

Aufzeichnung

Swasheck
quelle
32
Der eine treibt ein Handwerk an, der andere wird von schmutzigen Hipstern zum Musizieren benutzt
billinkc
1
Ein verwandter Beitrag zu SO zeigt deutlich, dass dies eine wichtige Frage ist.
Dezso
Beachten Sie, dass in Postgres und Oracle eine einzelne Zeile mehrere Datensätze enthalten kann ...
a_horse_with_no_name

Antworten:

69

Um Joe Celko zu zitieren (diese Referenz finden Sie nicht nur im Internet und in seinem Wikipedia-Eintrag , sondern auf einigen Konferenzen sogar auf T-Shirts):

Zeilen sind keine Datensätze.

Viele Leute weisen ihn auf einen pedantischen Idioten hin, der es einfach mag, Neulinge zu demütigen und verbal zu missbrauchen, und ich gebe zu, dass er so rüberkommt. Aber ich habe ihn auch persönlich getroffen - sogar ein Essen mit ihm geteilt - und ich kann Ihnen nicht sagen, wie unterschiedlich seine reale Persönlichkeit von seiner Online-Front ist. Ich habe ihn sogar einmal beim Aufrufen von Datensätzen erwischt, und er war sehr verlegen ( vollständige Hintergrundgeschichte hier ).

Ich habe dieses Shirt 2006 bei der PASS-Konferenz in Grapevine, Texas, getragen

Sagen Sie auf jeden Fall, was Sie über den Online-Charakter des Typen sagen wollen, aber er hat den Standard geschrieben , und die Tatsache, dass eine solche Autorität vorschreibt, dass es einen Unterschied gibt, sollte Ihnen etwas sagen. Und so sehr er sich zuckt, wenn jemand eine Zeile als Datensatz bezeichnet, tun dies auch viele meiner Kollegen - die auch Experten in der SQL Server-Welt sind. Und die von uns in diesem Lager glauben, dass er Recht hat.

Zum Beispiel Itzik Ben-Gan, ein offensichtlicher SQL Server-Guru. Hier ist ein Zitat aus der allerersten Lektion in seinem Training Kit (Prüfung 70-461): Abfragen von Microsoft SQL Server 2012 :

Als Beispiel für falsche Begriffe in T-SQL werden häufig die Begriffe "Feld" und "Datensatz" verwendet, um zu bezeichnen, was T-SQL als "Spalte" bzw. "Zeile" bezeichnet. Felder und Datensätze sind physisch. Felder sind das, was Sie in Benutzeroberflächen in Clientanwendungen haben, und Datensätze sind das, was Sie in Dateien und Cursorn haben. Tabellen sind logisch und haben logische Zeilen und Spalten.

Und wenn Sie Itzik eine E-Mail schicken oder ihn auf einer Konferenz ansprechen, wird er Ihnen dies gerne mitteilen. Wenn Sie eine Zeile als Datensatz bezeichnen, verwenden Sie die Terminologie seiner Meinung nach nicht korrekt.

Jetzt, da Sie eine Branche voller Menschen aller Art sind, werden Sie wahrscheinlich Material finden (wie die in einer anderen Antwort veröffentlichten technischen Zielartikel), das sehr subtile Unterschiede zwischen den beiden zu machen scheint, und Sie werden viele Leute in der Branche finden Betrachten Sie sie als gleich (ich kenne einige Leute bei Microsoft und andere Leute wie Brent Ozar, die es einfach immer als Rekord bezeichnen). Das macht sie nicht richtig, das ist nur ihre Sichtweise - sie sehen logisch und physisch gleich (zumindest in diesem Zusammenhang) und viele von ihnen denken wahrscheinlich, dass der Rest von uns nur anale Retentive sind, die zu viel Zeit verbringen zur Semantik.

Da kein Verkäufer sagen kann, "du sollst sie {records | rows} nennen", werden wir uns für immer mit diesem Argument befassen, weil es immer jemanden geben wird, der das logische vs. das physikalische nicht versteht oder anders unterrichtet wurde, oder kam von Access oder Programmier-Hintergründen usw. Genau wie einige Leute Tomay-To sagen und andere Tomah-To sagen, wird es immer eine Vielzahl von Leuten geben, die von "sie sind gleich" bis "sie sind völlig verschieden" reichen "- und viele Schatten dazwischen. Auch das macht keinen von ihnen richtig, weil niemand die ultimative Autorität in diesem Bereich sein kann. Aber im SQL Server-Bereich gibt es definitiv eine Mehrheit.


Das heißt, IMHO, wenn Sie über Daten sprechen, die sich in einer Tabelle befinden, nennen Sie es eine Zeile. Wenn Sie eine Einfügung durchführen, fügen Sie eine Zeile in eine Tabelle ein. Wenn Sie ein Update ausführen, aktualisieren Sie eine Zeile in einer Tabelle. Und wenn Sie ein SELECT ausführen, rufen Sie Zeilen aus einer Tabelle ab.

Sie können es auch als Datensatz bezeichnen, sobald Ihre Anwendung darauf Zugriff hat. Aber sei nicht böse, wenn du sagst: "Ich habe einen Datensatz eingefügt", und jemand korrigiert dich.

Aaron Bertrand
quelle
33

Microsoft hat an mehreren Stellen in seiner Organisation vorgesehen, dass der offizielle Name für die tabellarische Datenspeicherung pro Tabelleneintrag (um eine taxonomische Definition zu prägen, die meinem eigenen Zweck dient) als "ROW" bezeichnet wird. Ich lege als Beweis ROW_NUMBER, ROWCOUNT, ROWVERSIONund die DataTable.RowsEigenschaft, in dem eine DataTableeine C # Darstellung einer TSQL „table“ Objekt ist. In diesem Fall empfehlen die MSDN-Eigenschaften als Ganzes die Verwendung von row, um auf eine Sammlung von Daten zu verweisen, die ein Eintrag in einer Tabelle ist. (Beachte, ich versuche die Verwendung von "record" oder "row" zu vermeiden, um dies zu definieren, da dies der Punkt der Frage ist.)

Der Ausdruck ist jedoch, dass sich eine Anwendung mit Benutzer- "Datensätzen" befasst. Das Einzigartige an einem Datensatz, der möglicherweise nicht direkt durch eine einzelne Speicherzeile dargestellt wird, ist die Tatsache, dass ein Datensatz Unterdatensätze enthalten kann. Eine Tabelle kann zwar mehrere verknüpfte Tabellen enthalten, diese werden jedoch nicht zusammenhängend, sondern logisch verknüpft gespeichert.

Eine Zeile ist also das Ding in einer Tabelle, und ein Datensatz ist das Ding, mit dem der Entwickler im praktischen Gebrauch arbeitet.

jcolebrand
quelle
8
Man kann argumentieren, dass die REIHE die logische Entität ist, während die AUFNAHME die physikalische Entität ist. Eine REIHE kann mehrere Datensätze enthalten: einen im Clustered-Index und mehrere in den NC-Indizes. Eine Zeile, die nicht in die Seite passt, kann zwischen dem Datensatz auf der Seite und den Überlaufdatensätzen im SLOB-Speicher aufgeteilt werden. Ein BLOB-Wert eines Feldes einer Zeile kann sich über mehrere TEXT-Datensätze im BLOB-Speicher erstrecken. Eine Zeile in einem Heap kann aus einem Stub-Datensatz und einem Forward-Datensatz bestehen. Etc. etc.
Remus Rusanu
Dann hätten Sie die Verwendung des Wortdatensatzes vollständig aus der App-Domäne entfernt oder das Wasser völlig durcheinander gebracht und uns von definierbaren Begriffen in den Bereich des theoretischen Datenbankdesigns und der Implementierungsdetails geführt. Sie sprechen gute Punkte an, aber von der Konvention zwischen Apps und Datenbanken, bei der 80% unserer Leser sich wohl fühlen, halte ich meine Antwort immer noch für richtig.
Jcolebrand
4
Ich widerspreche Ihrer Antwort nicht, vielleicht habe ich mich geirrt. Ich habe nur dargestellt, wie die Dinge von der SQL Engine selbst gesehen werden, wobei die physische Zugriffsebene sie als "Datensätze" bezeichnet, im Gegensatz zur Abfrageverarbeitungsschicht (Sprache), die "Zeilen" verarbeitet.
Remus Rusanu
Aha. Ich habe immer noch das Gefühl, dass es das Wasser trübt. Nichts für ungut, das versichere ich Ihnen.
Jcolebrand
31

Ich habe gerade das Dokument "Informationstechnologie - Datenbanksprachen - SQL Teil 2: Foundation (SQL / Foundation)" durchsucht, das den ANSI-Standard für SQL definiert, der von allen wichtigen RDBMS implementiert wird.

Das Wort rowwird wie erwartet in erster Linie mehrere hundert Mal im gesamten Dokument verwendet.

Das Wort recordwurde nur verwendet, um einen Datensatz zu beschreiben, der einem in Oracle PL / SQL verwendeten Datensatz ähnelt (der speziell ADA-Datensatzdatentypen beschreibt). 6 Erwähnungen im Dokument.

Ich denke, das klärt diese Frage und beantwortet die verschiedenen Argumente auf beiden Seiten.


zusätzliche Information

Aus einer Kopie eines (Entwurfsversion des neuesten frei verfügbaren) SQL-Standards, der auf wiscorp.com zu finden ist (die Seite SQL-Standards enthält mehrere ältere Versionen und Überarbeitungen).

Durchsuchen der 7IWD2-02-Foundation-2011-12.pdf , mit Datum vom 2011-12-21 offenbart , dass die Wortreihe 2277 mal in dem Dokument erscheint , während das Wort Datensatz nur 21 mal, entweder als Verb „record“ erscheint oder in einigen Anhängen am Ende in Spezifikationen der Datentyp-Entsprechungen für SQL-Datentypen und Host-Sprachtypen (Ada, Pascal).

Darüber hinaus hat dasselbe Dokument auf Seite 57 (Hervorhebung von mir):

4.15.1 Einführung in Tabellen

Dieser Unterabschnitt wird durch Unterabschnitt 4.10.1 „Einführung in Tabellen“ in ISO / IEC 9075-9 geändert.

Eine Tabelle ist eine Sammlung von null oder mehr Zeilen, wobei jede Zeile eine Folge von einem oder mehreren Spaltenwerten ist. Der spezifischste Typ einer Zeile ist ein Zeilentyp. Jede Zeile einer Tabelle hat denselben Zeilentyp, den Zeilentyp dieser Tabelle. Der Wert des i-ten Felds jeder Zeile in einer Tabelle ist der Wert der i-ten Spalte dieser Zeile in der Tabelle. Die Zeile ist die kleinste Dateneinheit, die in eine Tabelle eingefügt und aus einer Tabelle gelöscht werden kann.

Der Grad einer Tabelle und der Grad jeder ihrer Zeilen ist die Anzahl der Spalten dieser Tabelle. Die Anzahl der Zeilen in einer Tabelle ist ihre Kardinalität. Eine Tabelle, deren Kardinalität 0 (Null) ist, gilt als leer.

Eine Tabelle ist entweder eine Basistabelle , eine abgeleitete Tabelle oder eine vorübergehende Tabelle .


Für DBMS, die SQL verwenden, gilt Folgendes:

Zeilen sind keine Datensätze , Felder sind keine Spalten, Tabellen sind keine Dateien!

Philᵀᴹ
quelle
14

Da relationale Datenbanken selten isoliert verwendet werden, verweise ich immer auf Tabellen, Zeilen und Spalten, um Verwechslungen zwischen anderen Teilen des Systems zu vermeiden. In einer Client-Anwendung haben wir normalerweise andere Konstrukte, einschließlich Datenlesegeräte, Datasets, Datenzeilen, Datentabellen usw. - zum Beispiel wird "field" häufig für die Dateneingabe auf dem Bildschirm verwendet, und Pascal hat einen Record-Datentyp, der einer Struktur in C ähnelt .

Manchmal kann in einem Systemdesign die Idee eines "Datensatzes" verwendet werden, um etwas zu bedeuten, das breiter ist als eine einzelne Zeile. Es könnte eine Reihe sein und es ist Geschichte. Genau wie bei einer gelöschten Zeile kann es sich um eine Zeile handeln, die einfach mit einer Spalte als gelöscht markiert oder in eine gelöschte Tabelle "verschoben" wird (und nicht nur um das Fehlen einer Zeile, die nicht vorhanden ist und die nur schwer zu finden ist) festzunageln). Es gibt nur eine abwechslungsreichere Verwendung des Begriffs Aufzeichnung.

Tabellen, Zeilen und Spalten werden allgemein als Terminologie für Verweise auf diese Entitäten in relationalen Datenbanken akzeptiert, einschließlich Arbeiten und Arbeiten von Codd und Date. Die Mehrheit der Datenbankfachleute bevorzugt diese Terminologie, da sie eindeutiger ist.

Wenn man von Zeilen und Spalten spricht, gibt es normalerweise keine Mehrdeutigkeit. Andere Leute verstehen, dass es sich um das zugrunde liegende physische Design der Datenbank handelt und nicht um andere Artefakte aus einem logischen Design vor dem physischen Design oder um neu auftretende Systementitäten wie Felder auf einem Bildschirm.

Cade Roux
quelle
9

Obwohl Ihre Frage schon sehr gut beantwortet ist. Ich möchte auch meine Punkte hinzufügen. Vielleicht finden Sie es bis zu einem gewissen Grad hilfreich. Auch meine Antwort ist nicht spezifisch für SQL Server

Diese Wörter werden synonym verwendet.

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

Column =  Field   =  Attribute    =  Attribute

table  =  File    =  Relation     =  Entity Types(or Entity Set)
  • 4 Terminologie gut zu verwenden, wenn wir ER-Module lernen
  • 3 Verwenden Sie beim relationalen Modell
  • 2 im Allgemeinen Szene, DataBase books start with these terminologyweil diese häufig von Menschen im wirklichen Leben verwendet werden, auch im Dateisystem.

Datensatz ist die Basiseinheit im Speichersystem, die eine implizite Bedeutung hat. In DBMS beschreibt das recordin Kapitel verwendete Wort , wie Datenbanktabellen auf Plattenblöcken gespeichert werden. In DBMS record-oriented file-systemist a ein Dateisystem, in dem Dateien als Sammlungen von Datensätzen gespeichert werden.

Grijesh Chauhan
quelle
9

Die Sprache entwickelt sich weiter. Vor einigen Jahrzehnten verwendeten die gebildeten Leute "Indizes" anstelle von einfacheren "Indizes". Als wir zu "Indizes" wechselten, haben wir unnötige Komplikationen beseitigt und die Sprache nützlicher gemacht. Die Notwendigkeit, einen Plural für "Index" auswendig zu lernen, war ein reiner Aufwand - es half uns in keiner Weise bei der Kommunikation. Machen Sie keinen Fehler, es gab früher Grammatik-Nazis, die es genossen, diejenigen zu korrigieren, die zu "Indizes" wechselten. Natürlich haben Grammatik-Nazis verloren. Auf diese Weise beseitigt Occams Rasiermesser nutzlose Details, wenn das Ganze lange genug relevant bleibt.

Lassen Sie es uns ruhig angehen: Wenn wir den Unterschied zwischen Zeilen und Datensätzen kennen, trägt dies absolut nichts zu unserer Fähigkeit bei, Datenbanken zu entwickeln und zu verwalten. Viele exzellente Profis verwenden Zeilen und Datensätze austauschbar und entwickeln dennoch großartige Systeme. Als solches sollte Ockhams Rasiermesser irgendwann die Unterscheidung aufheben, und die nächste Generation wird eine weniger nutzlose Tatsache lernen müssen. Wenn zu diesem Zeitpunkt natürlich noch SQL relevant ist.

AK
quelle
5

Um CJ Dates Buch "Eine Einführung in Datenbanksysteme" zu zitieren: " Die Zeilen einer solchen Tabelle können als die Aufzeichnungen der Datei angesehen werden ... "

Für Datenbanken ist es Row.

Andrew Peterson
quelle
4

Kurze Antwort :

  • Ein Datensatz besteht aus gespeicherten (oder gesammelten) Daten.
  • Eine Zeile ist ein linear gespeicherter Datensatz.
  • Verwenden Sie nach Möglichkeit den genaueren Begriff.

Hinweis: Tabellen speichern Datensätze linear und Abfragen geben Ergebnisse linear zurück

Unterstützung :

Zusätzliche Definitionen aus dem gesamten Web:

  • SQL "row" ( 1 , 2 )
  • SQL "record" ( 1 , 2 )
  • "record" ( 1 , 2 , 3 , 4 )
  • "row" ( 1 , siehe auch 2 , 3 , 4 )
  • Row vs Record auf StackOverflow ( 1 , 2 )

Es ist bemerkenswert, dass die SQL-Definitionen im Allgemeinen der englischen Definition folgen.

Wenn Sie eine Definition haben, von der Sie denken, dass sie hier sein sollte, fügen Sie sie bitte den Kommentaren hinzu.
Mich interessieren vor allem Definitionen aus dem SQL-Standard oder die Dokumentation einer Implementierung.

Das Zitat wurde "Zeilen sind keine Datensätze" gebracht. Aus dem Zusammenhang gerissen, scheint dies meinen früheren Behauptungen (und denen vieler Datenbankfachleute) zu widersprechen. Aber wenn Sie den ganzen Beitrag ( 1 Search for the quote) von Joe Celko (aka --CELKO--) lesen, wird klar, dass Joe Celko versucht, ein Missverständnis einer Person zu korrigieren, von dem Joe Celko glaubt, dass es sich aus der Person ergibt. " ... Hintergrundinformationen zur Datenverarbeitung mit traditionellen Dateisystemen ... ". Kurz gesagt, Joe Celko sagt, dass SQL-Zeilen nicht wie Datensätze in anderen Systemen funktionieren. Joe Celko beansprucht nicht das Recht / Privileg, einen Begriff zu definieren, sondern versucht, ein Missverständnis auszuräumen, das durch die inkorrekte Anwendung von Prinzipien eines Speichermodells auf ein anderes entsteht.

Trisped
quelle
3
Ich schätze die Arbeit und dachte, Sie stecken in diese. Ich werde bemerken, dass die Differenzierung von Celko die Unterschiede zwischen dem RDBMS und den Flat-File-COBOL-Systemen aufzeigen soll, die dem RDBMS vorausgingen. Ergo betont er die "Zeile" als Teil eines RDBMS-Schemas und einen "Datensatz" als Bestandteil einer Einfachdatei.
Swasheck