Apa perbedaan antara "catatan" dan "baris" di SQL Server?

56

Ada pertanyaan yang agak tidak berbahaya tentang menambahkan tanggal dan waktu di SQL Server yang memicu perdebatan taksonomi yang agak menarik.

Jadi bagaimana kita membedakan antara istilah-istilah terkait ini dan bagaimana kita menggunakannya dengan benar?

Baris

Merekam

swasheck
sumber
32
Satu mendorong kerajinan, yang lain digunakan oleh hipsters kotor untuk memutar musik
billinkc
1
Posting terkait pada SO menunjukkan dengan jelas bahwa ini adalah pertanyaan penting.
dezso
Perhatikan bahwa di Postgres dan Oracle, satu baris dapat berisi banyak catatan ...
a_horse_with_no_name

Jawaban:

69

Mengutip Joe Celko (Anda tidak hanya dapat menemukan referensi ini di seluruh web dan di entri Wikipedia-nya , tetapi Anda bahkan akan melihatnya di T-shirt di beberapa konferensi):

Baris bukan catatan.

Banyak orang menunjukkannya sebagai orang brengsek yang suka menyombongkan diri dan menyalahgunakan para pemula, dan saya akui itulah yang ia temukan. Tetapi saya juga telah bertemu dengannya secara langsung - bahkan berbagi makanan dengannya - dan saya tidak dapat memberi tahu Anda betapa berbedanya kepribadiannya yang sebenarnya dari front online-nya. Aku bahkan pernah memergokinya memanggil deretan catatan, dan dia sangat malu ( cerita lengkap di sini ).

Saya sebenarnya mengenakan kemeja ini ke konferensi PASS di Grapevine, Texas, pada tahun 2006

Dalam kasus apa pun, katakan apa yang Anda inginkan tentang karakter online pria itu, tetapi dia menulis standar , dan fakta bahwa otoritas seperti itu menentukan bahwa ada perbedaan harus memberi tahu Anda sesuatu. Dan sebanyak yang dia ngeri ketika seseorang menyebut deretan catatan, demikian juga banyak rekan saya - yang juga ahli dalam dunia SQL Server. Dan kita di kamp itu percaya dia benar.

Misalnya, Itzik Ben-Gan, guru SQL Server yang jelas. Berikut ini kutipan dari pelajaran pertama dalam Kit Pelatihannya (Ujian 70-461): Meminta Microsoft SQL Server 2012 :

Sebagai contoh istilah yang salah dalam T-SQL, orang sering menggunakan istilah "bidang" dan "catatan" untuk merujuk pada apa yang disebut T-SQL sebagai "kolom" dan "baris," masing-masing. Bidang dan catatan bersifat fisik. Bidang adalah apa yang Anda miliki di antarmuka pengguna dalam aplikasi klien, dan catatan adalah apa yang Anda miliki dalam file dan kursor. Tabel logis, dan mereka memiliki baris dan kolom logis.

Dan, mengenal Itzik, jika Anda mengiriminya email atau memojokkannya di sebuah konferensi, dia akan dengan senang hati mengatakan hal yang sama kepada Anda. Jika Anda menyebut deretan catatan, menurutnya, Anda tidak menggunakan terminologi dengan benar.

Sekarang, sebagai industri yang penuh dengan orang-orang dari segala jenis, Anda cenderung menemukan materi (seperti artikel target teknologi yang diposting di jawaban lain) yang tampaknya membuat perbedaan yang sangat halus antara keduanya, dan Anda akan menemukan banyak orang di industri menganggap mereka sama (saya tahu beberapa orang di Microsoft, dan orang lain seperti Brent Ozar, yang hanya akan selalu menyebutnya sebagai catatan). Itu tidak membuat mereka benar, itu hanya cara mereka memandangnya - mereka memandang logis dan fisik sebagai hal yang sama (setidaknya dalam konteks ini) dan banyak dari mereka mungkin berpikir bahwa kita semua hanyalah penarik dubur yang menghabiskan terlalu banyak waktu pada semantik.

Karena tidak ada vendor yang mengatakan "kamu akan memanggil mereka {records | rows}", kita akan selamanya berurusan dengan argumen ini, karena akan selalu ada seseorang yang tidak mendapatkan logika vs fisik, atau diajarkan secara berbeda, atau berasal dari akses atau latar belakang pemrograman, dll. Seperti halnya beberapa orang mengatakan tomay-to dan orang lain mengatakan tomah-to, akan selalu ada beragam orang yang berkisar dari "mereka sama" hingga "mereka sama sekali berbeda "- dan banyak corak di antaranya. Sekali lagi, itu tidak membuat mereka benar, karena tidak ada yang bisa menjadi otoritas tertinggi dalam hal ini. Tetapi dalam ruang SQL Server, pasti ada mayoritas.


Yang mengatakan, IMHO, ketika Anda berbicara tentang data yang ada di dalam tabel, Anda menyebutnya baris. Saat Anda melakukan penyisipan, Anda memasukkan baris ke dalam tabel. Saat Anda menjalankan pembaruan, Anda memperbarui baris yang ada di dalam tabel. Dan ketika Anda melakukan SELECT, Anda mengambil baris dari sebuah tabel.

Jangan ragu untuk menyebutnya sebagai catatan setelah aplikasi Anda menyimpannya. Tetapi jangan marah jika Anda berkata, "Saya memasukkan catatan," dan seseorang mengoreksi Anda.

Aaron Bertrand
sumber
33

Microsoft telah di beberapa tempat di organisasi mereka asalkan nama resmi untuk penyimpanan data tabel per entri-tabel (untuk membuat definisi taksonomi yang melayani tujuan saya sendiri) disebut "ROW". Saya serahkan sebagai bukti ROW_NUMBER, ROWCOUNT, ROWVERSIONdan DataTable.Rowsproperti, di mana DataTableadalah C # representasi dari TSQL "meja" objek. Dalam hal ini, properti MSDN secara keseluruhan mendorong penggunaan rowuntuk merujuk pada kumpulan data yang merupakan satu entri dalam tabel. (perhatikan saya mencoba menghindari penggunaan "catatan" atau "baris" untuk mendefinisikan ini, yang menjadi titik pertanyaan)

Namun, istilahnya adalah bahwa aplikasi berkaitan dengan "catatan" pengguna. Sesuatu yang unik tentang catatan yang mungkin tidak secara langsung diwakili oleh satu baris penyimpanan adalah kenyataan bahwa catatan dapat memiliki subkunci. Benar, sebuah tabel dapat memiliki banyak-ke-satu tabel terkait, tetapi mereka tidak disimpan secara bersamaan, tetapi mereka disimpan secara logis terkait.

Jadi, baris adalah hal dalam tabel, dan catatan adalah hal yang digunakan pengembang dalam penggunaan praktis.

jcolebrand
sumber
8
Orang dapat berargumen bahwa ROW adalah entitas yang logis, sedangkan RECORD adalah entitas fisik. ROW mungkin memiliki banyak catatan: satu di indeks berkerumun, beberapa di indeks NC. Baris yang tidak cocok di halaman dapat dibagi antara catatan di halaman dan catatan melimpah di penyimpanan SLOB. Nilai BLOB dari bidang baris dapat menjangkau beberapa catatan TEKS di penyimpanan BLOB. Baris dalam tumpukan dapat terdiri dari catatan rintisan dan catatan maju. Dll dll.
Remus Rusanu
Maka Anda akan benar-benar menghapus penggunaan catatan kata dari domain aplikasi, atau benar-benar mengeruhkan air dan telah membawa kami menjauh dari istilah yang dapat ditentukan dan masuk ke ranah perancangan basis data teoritis dan detail implementasi. Anda mendapatkan poin bagus, tetapi dari konvensi aplikasi vs database, di mana 80% pembaca kami akan merasa nyaman, jawaban saya tetap ada, saya pegang.
jcolebrand
4
Saya tidak menentang jawaban Anda, mungkin saya salah kata. Saya hanya mempresentasikan bagaimana hal-hal dilihat oleh Mesin SQL itu sendiri, di mana lapisan akses fisik menyebutnya 'catatan' vs. lapisan pemrosesan query (bahasa) yang menangani 'baris'.
Remus Rusanu
Saya melihat. Saya masih merasa seperti itu mengotori perairan. Jangan tersinggung, saya yakinkan Anda.
jcolebrand
31

Saya baru saja mencari melalui dokumen "Teknologi informasi - Bahasa basis data - SQL Bagian 2: Yayasan (SQL / Foundation)", yang mendefinisikan standar ANSI untuk SQL sebagaimana diterapkan oleh semua RDBMS utama.

Kata rowini digunakan terutama di seluruh dokumen beberapa ratus kali, seperti yang diharapkan.

Kata recorditu hanya digunakan untuk menggambarkan catatan yang mirip dengan catatan yang digunakan dalam Oracle PL / SQL (khusus menggambarkan tipe data catatan ADA). 6 menyebutkan dalam dokumen.

Saya pikir ini membersihkan pertanyaan ini, dan menjawab berbagai argumen di kedua sisi.


informasi tambahan

Dari salinan (standar versi terbaru yang tersedia secara bebas) SQL, yang dapat ditemukan di wiscorp.com (halaman SQL Standards memiliki beberapa versi lama dan revisi).

Pencarian pada 7IWD2-02-Foundation-2011-12.pdf , dengan tanggal 2011-12-21 mengungkapkan bahwa baris kata muncul 2277 kali dalam dokumen sementara kata catatan muncul hanya 21 kali, baik sebagai kata kerja "catatan" atau dalam beberapa lampiran pada akhirnya, dalam spesifikasi korespondensi tipe data untuk tipe data SQL dan tipe bahasa host (Ada, Pascal).

Selain itu, dokumen yang sama ada di halaman 57 (penekanan milikku):

4.15.1 Pengantar tabel

Subclause ini dimodifikasi oleh Subclause 4.10.1, “Pengantar tabel”, dalam ISO / IEC 9075-9.

Tabel adalah kumpulan dari nol atau lebih baris di mana setiap baris adalah urutan satu atau lebih nilai kolom. Jenis baris yang paling spesifik adalah tipe baris. Setiap baris dari tabel yang diberikan memiliki tipe baris yang sama, disebut tipe baris dari tabel itu. Nilai bidang ke-i dari setiap baris dalam sebuah tabel adalah nilai dari kolom ke-ke-1 dari baris tersebut di dalam tabel. Baris adalah unit data terkecil yang dapat dimasukkan ke dalam tabel dan dihapus dari tabel.

Derajat tabel, dan derajat setiap barisnya , adalah jumlah kolom tabel tersebut. Jumlah baris dalam sebuah tabel adalah kardinalitasnya. Tabel yang kardinalitasnya 0 (nol) dikatakan kosong.

Sebuah meja adalah baik tabel basis , sebuah meja berasal , atau meja sementara .


Sejauh menyangkut DBMS yang menggunakan SQL:

Baris bukan catatan , bidang bukan kolom, tabel bukan file!

Philᵀᴹ
sumber
14

Karena database relasional jarang digunakan dalam isolasi, untuk menghindari kebingungan antara bagian-bagian lain dari sistem, saya selalu merujuk pada tabel dan baris dan kolom. Dalam aplikasi klien, kami biasanya memiliki konstruksi lain, termasuk datareader, dataset, datarows, datatables, dll - misalnya "bidang" sering digunakan untuk entri data di layar dan Pascal memiliki catatan data yang mirip dengan struct di C .

Terkadang dalam desain sistem, gagasan "Rekaman" dapat digunakan untuk mengartikan sesuatu yang lebih luas daripada satu baris. Mungkin sebuah baris dan itu adalah sejarah. Sama seperti ketika kita berbicara tentang baris yang dihapus, kita mungkin berarti baris yang hanya ditandai sebagai dihapus dengan kolom atau "dipindahkan" ke tabel yang dihapus (dan bukan hanya tidak adanya baris yang, karena tidak ada, agak sulit untuk dijabarkan). Hanya ada lebih beragam penggunaan istilah Rekam.

Tabel, baris, dan kolom adalah terminologi yang secara umum diterima untuk merujuk entitas ini dalam database relasional, termasuk makalah dan pekerjaan dengan Codd dan Date, dan mayoritas profesional basis data lebih suka terminologi ini karena lebih jelas.

Biasanya tidak ada ambiguitas ketika seseorang berbicara tentang baris dan kolom - orang lain mengerti Anda berbicara tentang desain fisik basis data yang mendasari dan tidak ada artefak lain dari desain logis sebelum desain fisik atau entitas sistem yang muncul kemudian seperti bidang pada bidang layar.

Cade Roux
sumber
9

Meskipun pertanyaan Anda sudah dijawab dengan sangat baik. Saya juga ingin menambahkan poin saya. Mungkin Anda merasa terbantu sampai batas tertentu. Juga jawaban saya tidak spesifik untuk SQL Server

Kata-kata ini digunakan secara bergantian.

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

Column =  Field   =  Attribute    =  Attribute

table  =  File    =  Relation     =  Entity Types(or Entity Set)
  • 4 terminologi bagus untuk digunakan ketika kita mempelajari Modul-ER
  • 3 digunakan saat Model Relasional
  • 2 adegan umum, DataBase books start with these terminologykarena ini banyak digunakan oleh orang-orang dalam kehidupan nyata, juga dalam sistem file.

Record adalah unit dasar dalam sistem penyimpanan yang memiliki makna implisit. Dalam DBMS kata yang recorddigunakan dalam bab menjelaskan bagaimana tabel database disimpan di blok disk. Dalam DBMS a record-oriented file-systemadalah sistem file di mana file disimpan sebagai koleksi catatan.

Grijesh Chauhan
sumber
9

Bahasa terus berkembang. Beberapa dekade yang lalu orang yang melek huruf menggunakan "indeks" alih-alih "indeks" yang lebih sederhana. Saat kami beralih ke "indeks", kami menghilangkan komplikasi yang tidak perlu dan membuat bahasa lebih berguna. Kebutuhan untuk menghafal jamak untuk "indeks" adalah murni overhead - tidak dengan cara apa pun membantu kami berkomunikasi. Jangan salah, dulu ada tata bahasa Nazi yang menikmati mengoreksi mereka yang beralih ke "indeks". Tentu saja, tata bahasa Nazi hilang. Beginilah cara pisau cukur Occam menghilangkan detail yang tidak berguna jika semuanya tetap relevan cukup lama.

Jadi mari kita santai - mengetahui perbedaan antara baris dan catatan sama sekali tidak menambah kemampuan kita untuk mengembangkan dan memelihara basis data. Banyak profesional hebat menggunakan baris dan catatan secara bergantian, namun mengembangkan sistem yang mengagumkan. Dengan demikian, pisau cukur Occam pada akhirnya harus menghilangkan perbedaan, dan generasi berikutnya harus belajar satu fakta yang kurang berguna. Jika, tentu saja, SQL masih relevan pada saat itu.

AK
sumber
5

Mengutip buku CJ Date, "Pengantar Sistem Basis Data" " Baris-baris dari tabel seperti itu dapat dianggap sebagai catatan file ... "

Jadi, untuk database, itu adalah Row.

Andrew Peterson
sumber
4

Jawaban singkat :

  • Catatan adalah sepotong data yang disimpan (atau dikumpulkan).
  • Baris adalah catatan yang disimpan secara linear.
  • Jika memungkinkan, gunakan istilah yang lebih spesifik.

Catatan: tabel menyimpan catatan secara linear dan kueri mengembalikan hasil secara linear

Dukungan :

Definisi tambahan dari seluruh web:

  • SQL "row" ( 1 , 2 )
  • SQL "record" ( 1 , 2 )
  • "record" ( 1 , 2 , 3 , 4 )
  • "row" ( 1 , lihat juga 2 , 3 , 4 )
  • Baris vs Rekam di StackOverflow ( 1 , 2 )

Perlu dicatat bahwa definisi SQL umumnya mengikuti definisi bahasa Inggris.

Jika Anda memiliki definisi yang menurut Anda harus ada di sini, silakan tambahkan ke komentar.
Saya terutama tertarik pada definisi dari standar SQL atau dokumentasi implementasi.

Kutipan telah muncul "Baris bukan catatan." Diambil dari konteks ini tampaknya akan bertentangan dengan pernyataan saya sebelumnya (dan orang-orang dari banyak profesional basis data). Tapi, jika Anda membaca seluruh posting ( 1 Cari untuk kutipan) oleh Joe Celko (alias --CELKO--) menjadi jelas bahwa Joe Celko sedang mencoba untuk memperbaiki kesalahpahaman tentang individu yang menurut Joe Celko muncul dari orang itu " ... latar belakang dalam pemrosesan data dengan sistem file tradisional ... ". Singkatnya Joe Celko mengatakan baris SQL tidak berfungsi sama dengan catatan di sistem lain. Joe Celko tidak mengklaim hak / hak istimewa untuk mendefinisikan suatu istilah, ia mencoba untuk menjernihkan pemahaman yang salah yang disebabkan oleh penerapan salah satu model penyimpanan yang salah.

Berbilah
sumber
3
Saya menghargai pekerjaan ini dan saya pikir Anda memasukkan ini ke dalam. Saya akan mencatat bahwa diferensiasi Celko dimaksudkan untuk menarik keluar perbedaan antara RDBMS dan sistem file-COBOL datar yang mendahului RDBMS. Ergo, dia menekankan "baris" sebagai bagian dari skema RDBMS dan "catatan" sebagai bagian konstituen dari file flat.
swasheck