Jaka jest różnica między „rekordem” a „wierszem” w SQL Server?

56

Pytanie o dodanie dat i godzin w SQL Server było dość nieszkodliwe, co zapoczątkowało dość fascynującą debatę taksonomiczną.

Jak zatem rozróżnić te powiązane terminy i jak je właściwie wykorzystywać?

Rząd

Rekord

swasheck
źródło
32
Jeden napędza statek, drugi jest wykorzystywany przez brudnych hipsterów do odtwarzania muzyki
billinkc
1
Powiązany post na SO pokazuje wyraźnie, że jest to ważne pytanie.
dezso
Pamiętaj, że w Postgres i Oracle pojedynczy wiersz może zawierać wiele rekordów ...
a_horse_w_no_name

Odpowiedzi:

69

Cytując Joe Celko (nie tylko można znaleźć ten odnośnik w Internecie i we wpisie w Wikipedii , ale można go nawet zobaczyć na koszulkach na niektórych konferencjach):

Rzędy nie są zapisami.

Wiele osób wskazuje go jako pedantycznego palanta, który lubi pokorę i słowne znęcanie się nad nowicjuszami, i przyznam, że tak właśnie się spotyka. Ale spotkałem go również osobiście - nawet z nim zjadłem - i nie mogę powiedzieć, jak różni się jego prawdziwa osobowość od jego frontu online. Raz nawet przyłapałem go na wzywaniu rekordów wierszy, a on był bardzo zawstydzony ( tutaj pełna historia ).

Noszę tę koszulę na konferencję PASS w Grapevine w Teksasie w 2006 roku

W każdym razie powiedz co zrobisz o postaci online faceta, ale on napisał standard , a fakt, że taki autorytet dyktuje, że istnieje rozróżnienie, powinien ci coś powiedzieć. I o ile kuli się, gdy ktoś nazywa wiersz rekordem, podobnie jak wielu moich kolegów - którzy są również ekspertami w świecie SQL Server. A ci z nas w tym obozie wierzą, że ma rację.

Na przykład Itzik Ben-Gan, oczywisty guru SQL Server. Oto cytat z pierwszej lekcji w jego zestawie szkoleniowym (egzamin 70-461): Sprawdzanie Microsoft SQL Server 2012 :

Jako przykład niepoprawnych terminów w języku T-SQL ludzie często używają terminów „pole” i „rekord” w odniesieniu do tego, co T-SQL nazywa odpowiednio „kolumną” i „wierszem”. Pola i rekordy są fizyczne. Pola są tym, co masz w interfejsach użytkownika w aplikacjach klienckich, a rekordy są tym, co masz w plikach i kursorach. Tabele są logiczne i mają logiczne wiersze i kolumny.

A znając Itzika, jeśli wyślesz mu wiadomość e-mail lub wyślesz go na konferencję, z przyjemnością Ci to powie. Jeśli nazywasz wiersz rekordem, jego zdaniem nie używasz terminologii poprawnie.

Teraz, będąc branżą pełną wszelkiego rodzaju ludzi, prawdopodobnie znajdziesz materiały (takie jak artykuły o celach technicznych zamieszczone w innej odpowiedzi), które wydają się robić bardzo subtelne różnice między nimi, a znajdziesz wielu ludzi w branży traktuj ich tak samo (znam kilku ludzi z Microsoftu i innych takich jak Brent Ozar, którzy zawsze będą to nazywać rekordem). To nie czyni ich słusznymi, to tylko ich sposób patrzenia na to - widzą logiczne i fizyczne to samo (przynajmniej w tym kontekście) i wielu z nich prawdopodobnie uważa, że ​​reszta z nas jest tylko analnymi retentami spędzającymi zbyt dużo czasu na semantykę.

Ponieważ żaden sprzedawca nie powie: „będziesz do nich dzwonił {zapis | wiersze}”, na zawsze będziemy mieć do czynienia z tym argumentem, ponieważ zawsze znajdzie się ktoś, kto nie rozumie logicznie vs. fizycznie, lub był nauczany inaczej, lub pochodzi z programu Access lub środowisk programistycznych itp. Tak jak niektórzy ludzie mówią „tomay-to”, a inni ludzie mówią „tomah-to”, zawsze będzie wiele osób, od „oni są tacy sami” do „oni są zupełnie inni „- i wiele odcieni pomiędzy. Ponownie, to nie czyni żadnego z nich słusznym, ponieważ nikt nie może być ostatecznym autorytetem w tym zakresie. Ale w przestrzeni SQL Server zdecydowanie jest większość.


To powiedziawszy, IMHO, kiedy mówisz o danych znajdujących się w tabeli, nazywasz to wierszem. Podczas wykonywania wstawiania wstawiasz wiersz do tabeli. Po uruchomieniu aktualizacji aktualizujesz wiersz znajdujący się w tabeli. A kiedy wykonujesz WYBIERZ, pobierasz wiersze z tabeli.

Możesz śmiało nazwać go rekordem, gdy aplikacja go zatrzyma. Ale nie złość się, jeśli powiesz „wstawiłem płytę”, a ktoś cię poprawi.

Aaron Bertrand
źródło
33

Microsoft w kilku miejscach w swojej organizacji pod warunkiem, że oficjalna nazwa tabelarycznego przechowywania danych według pozycji tabeli (w celu stworzenia definicji taksonomicznej, która służy mojemu celowi) nazywa się „ROW”. I przedstawić jako dowód ROW_NUMBER, ROWCOUNT, ROWVERSIONa DataTable.Rowsnieruchomość, gdzie DataTablejest reprezentacją C # z TSQL „stół” obiektu. W takim przypadku właściwości MSDN jako całości zachęcają do używania rowodniesienia do zbioru danych, który jest jednym wpisem w tabeli. (uwaga: staram się unikać używania „rekordu” lub „wiersza” do zdefiniowania tego, bo to jest pytanie)

Jednak najważniejsze jest to, że aplikacja zajmuje się „rekordami” użytkownika. Coś wyjątkowego w rekordzie, które nie może być bezpośrednio reprezentowane przez pojedynczy wiersz pamięci, polega na tym, że rekord może zawierać rekordy podrzędne. To prawda, że ​​tabela może mieć powiązane tabele wiele do jednego, ale te nie są przechowywane w sposób ciągły, ale są logicznie powiązane.

Tak więc wiersz jest tym, co znajduje się w tabeli, a rekord jest tym, z czym programista współpracuje w praktyce.

jcolebrand
źródło
8
Można argumentować, że ROW jest bytem logicznym, podczas gdy RECORD jest bytem fizycznym. ROW może mieć wiele rekordów: jeden w indeksie klastrowym, kilka w indeksach NC. Wiersz, który nie mieści się na stronie, można podzielić między rekordem na stronie i rekordami przepełnienia w pamięci SLOB. Wartość BLOB pola wiersza może obejmować kilka rekordów TEXT w pamięci BLOB. Wiersz w stercie może składać się z rekordu kodu pośredniczącego i rekordu przekazywania. Itd. Itp.
Remus Rusanu
Wtedy całkowicie usunąłbyś użycie słowa z domeny aplikacji lub całkowicie zmętniałeś wody i odciągnąłeś nas od definiowalnych terminów do dziedziny teoretycznego projektu bazy danych i szczegółów implementacyjnych. Podnosisz dobre punkty, ale z konwencji aplikacji i baz danych, w której 80% naszych czytelników będzie się czuły komfortowo, moja odpowiedź wciąż jest aktualna, rozumiem.
jcolebrand
4
Nie zaprzeczam twojej odpowiedzi, może źle napisałem. Przedstawiłem tylko sposób postrzegania rzeczy przez sam aparat SQL, w którym fizyczna warstwa dostępu nazywa je „rekordami”, a warstwa przetwarzania zapytań (języka), która obsługuje „wiersze”.
Remus Rusanu,
Widzę. Nadal wydaje mi się, że to błotniło wody. Zapewniam cię, że nie wziąłem urazy.
jcolebrand
31

Właśnie przeszukałem dokument „Technologia informacyjna - Języki baz danych - SQL Część 2: Podstawa (SQL / Foundation)”, który definiuje standard ANSI dla SQL, wdrażany przez wszystkie główne RDBMS.

Słowo rowto jest używane zgodnie z oczekiwaniami przede wszystkim w całym dokumencie kilkaset razy.

Słowo to recordzostało użyte jedynie do opisania rekordu podobnego do rekordu używanego w Oracle PL / SQL (konkretnie opisującego typy danych rekordów ADA). 6 wzmianek w dokumencie.

Myślę, że to wyjaśnia to pytanie i odpowiada na różne argumenty po obu stronach.


dodatkowe informacje

Z kopii (wstępnej wersji najnowszego darmowego) standardu SQL, który można znaleźć na stronie wiscorp.com (strona Standardy SQL zawiera kilka innych starszych wersji i poprawek).

Przeszukiwanie 7IWD2-02-Foundation 2011-12.pdf , z dnia 2011-12-21 ujawnia, że słowo wiersz pojawia 2277 razy w dokumencie, podczas gdy słowo zapis pojawia się tylko 21 razy, zarówno jako czasownik „record” lub w niektórych dodatkach na końcu, w specyfikacjach typów danych dla typów danych SQL i typów języka hosta (Ada, Pascal).

Co więcej, ten sam dokument ma na stronie 57 (wyróżnienie moje):

4.15.1 Wprowadzenie do tabel

Niniejszy Podpunkt został zmodyfikowany przez Podpunkt 4.10.1, „Wprowadzenie do tabel”, w ISO / IEC 9075-9.

Tabela to zbiór zero lub więcej wierszy, gdzie każdy wiersz jest sekwencją jednej lub więcej wartości kolumn. Najbardziej szczególnym typem wiersza jest typ wiersza. Każdy wiersz danej tabeli ma ten sam typ wiersza, zwany typem wiersza tej tabeli. Wartość i-tego pola każdego wiersza w tabeli jest wartością i-tej kolumny tego wiersza w tabeli. Wiersz jest najmniejszą jednostką danych, którą można wstawić do tabeli i usunąć z tabeli.

Stopień tabeli i stopień każdego jej wiersza to liczba kolumn tej tabeli. Liczba wierszy w tabeli jest licznością. Tabela, której liczność wynosi 0 (zero), mówi się, że jest pusta.

Stół jest albo tabeli bazowej , A Tabela pochodzi lub przemijające tabeli .


Jeśli chodzi o DBMS korzystające z SQL:

Wiersze nie są rekordami , pola nie są kolumnami, tabele nie są plikami!

Philᵀᴹ
źródło
14

Ponieważ relacyjne bazy danych są rzadko używane w izolacji, aby uniknąć pomyłek między innymi częściami systemów, zawsze odnoszę się do tabel, wierszy i kolumn. W aplikacjach klienckich zwykle mamy inne konstrukcje, w tym moduły danych, zestawy danych, datarows, bazy danych itp. - na przykład „pole” jest często używane do wprowadzania danych na ekranie, a Pascal ma typ danych Record, który jest podobny do struktury w C .

Czasami w projekcie systemu idea „rekordu” może być użyta w znaczeniu szerszym niż pojedynczy wiersz. Może to być wiersz i jego historia. Tak jak mówimy o usuniętym wierszu, możemy rozumieć wiersz, który jest po prostu oznaczony jako usunięty za pomocą kolumny lub „przeniesiony” do usuniętej tabeli (a nie po prostu brak wiersza, który, ponieważ nie istnieje, jest raczej trudny do zmusić). Istnieje tylko bardziej zróżnicowane użycie terminu Record.

Tabele, wiersze i kolumny są ogólnie przyjętą terminologią odnoszącą się do tych podmiotów w relacyjnych bazach danych, w tym w pracach Codda i Daty, a większość specjalistów w dziedzinie baz danych woli tę terminologię, ponieważ jest ona bardziej jednoznaczna.

Zwykle nie ma dwuznaczności, gdy mówi się o wierszach i kolumnach - inni ludzie rozumieją, że mówisz o fizycznym projekcie bazowej bazy danych, a nie o jakichkolwiek innych artefaktach z projektu logicznego przed projektem fizycznym lub dowolnymi późniejszymi istotami systemowymi, takimi jak pola na ekran.

Cade Roux
źródło
9

Chociaż na twoje pytanie udzielono już bardzo dobrej odpowiedzi. Chciałbym również dodać swoje punkty. Może ci się przydać do pewnego stopnia. Również moja odpowiedź nie jest specyficzna dla SQL Server

Te słowa są używane zamiennie.

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

Column =  Field   =  Attribute    =  Attribute

table  =  File    =  Relation     =  Entity Types(or Entity Set)
  • 4 terminologia dobra w użyciu, gdy uczymy się modułów ER
  • 3 użyć, gdy model relacyjny
  • 2 ogólna scena, DataBase books start with these terminologyponieważ są one powszechnie używane przez ludzi w prawdziwym życiu, także w systemie plików.

Rekord jest podstawową jednostką w systemie pamięci masowej, która ma niejawne znaczenie. W DBMS słowo recordużyte w rozdziale opisuje, w jaki sposób tabele bazy danych przechowują się na blokach dyskowych. W DBMS a record-oriented file-systemto system plików, w którym pliki są przechowywane jako zbiory rekordów.

Grijesh Chauhan
źródło
9

Język ciągle się rozwija. Kilka dekad temu piśmienni ludzie używali „indeksów” zamiast prostszych „indeksów”. Po przejściu na „indeksy” wyeliminowaliśmy niepotrzebne komplikacje i sprawiliśmy, że język jest bardziej użyteczny. Konieczność zapamiętania liczby mnogiej dla „indeksu” była czysto narzutem - w żaden sposób nie pomogła nam się porozumieć. Nie popełnijcie błędu, naziści gramatyczni lubili poprawiać tych, którzy przeszli na „indeksy”. Oczywiście, naziści gramatyczni stracili. W ten sposób brzytwa Ockhama eliminuje bezużyteczne szczegóły, jeśli całość pozostaje wystarczająco aktualna.

Uspokójmy się więc - znajomość różnicy między wierszami i rekordami absolutnie nic nie zwiększa naszej zdolności do tworzenia i utrzymywania baz danych. Wielu doskonałych profesjonalistów używa zamiennie wierszy i rekordów, ale opracowuje niesamowite systemy. W związku z tym brzytwa Ockhama powinna ostatecznie wyeliminować to rozróżnienie, a następne pokolenie będzie musiało nauczyć się jednego mniej bezużytecznego faktu. Jeśli oczywiście SQL jest nadal aktualny.

AK
źródło
5

Cytując książkę CJ Date „Wprowadzenie do systemów baz danych” „ Wiersze takiej tabeli można traktować jako rekordy pliku ...

Tak więc w przypadku baz danych jest to Row.

Andrew Peterson
źródło
4

Krótka odpowiedź :

  • Rekord to kawałek przechowywanych (lub zebranych) danych.
  • Wiersz jest zapisem przechowywanym liniowo.
  • Tam, gdzie to możliwe, używaj bardziej szczegółowego terminu.

Uwaga: tabele przechowują rekordy liniowo, a zapytania zwracają wyniki liniowo

Wsparcie :

Dodatkowe definicje z całej sieci:

  • SQL „wiersz” ( 1 , 2 )
  • „Rekord” SQL ( 1 , 2 )
  • „zapis” ( 1 , 2 , 3 , 4 )
  • „wiersz” ( 1 , patrz także 2 , 3 , 4 )
  • Wiersz vs rekord na StackOverflow ( 1 , 2 )

Warto zauważyć, że definicje SQL zasadniczo odpowiadają definicji w języku angielskim.

Jeśli masz definicję, która Twoim zdaniem powinna tu być, dodaj ją do komentarzy.
Szczególnie interesują mnie definicje ze standardu SQL lub dokumentacja implementacji.

Przytoczono cytat „Rzędy nie są zapisami”. Wyjęte z kontekstu wydaje się to przeczyć moim wcześniejszym twierdzeniom (i wielu specjalistów w dziedzinie baz danych). Ale jeśli przeczytasz cały post ( 1 Wyszukaj cytat) autorstwa Joe Celko (alias - CELKO--), staje się jasne, że Joe Celko próbuje poprawić błędne wyobrażenie o osobie, które według Joe Celko wynika z „ ... tło przetwarzania danych w tradycyjnych systemach plików ... ". Krótko mówiąc, Joe Celko mówi, że wiersze SQL nie działają tak samo jak rekordy w innych systemach. Joe Celko nie rości sobie prawa / przywileju zdefiniowania terminu, próbuje wyjaśnić brak zrozumienia wynikający z nieprawidłowego stosowania zasad jednego modelu przechowywania do drugiego.

Trisped
źródło
3
Doceniam pracę i pomyślałem, że w to włożyłeś. Zauważę, że różnicowanie Celko ma na celu wyjaśnienie różnic między RDBMS a płaskimi systemami COBOL plików, które poprzedzały RDBMS. Ergo, podkreśla on „wiersz” jako część schematu RDBMS i „rekord” jako część składową płaskiego pliku.
swasheck