SQL Server'da “kayıt” ve “satır” arasındaki fark nedir?


56

SQL Server'da oldukça etkileyici bir taksonomik tartışma başlatan tarih ve saat ekleme konusunda oldukça masum bir soru vardı .

Öyleyse bu ilgili terimleri nasıl ayırt ederiz ve bunları doğru şekilde nasıl kullanırız?

Kürek çekmek

Kayıt


32
Biri bir zanaat iter, diğeri kirli hipsters tarafından müzik çalmak için kullanılır
billinkc

1
SO ile ilgili bir yazı açıkça bunun önemli bir soru olduğunu göstermektedir.
dezso

Postgres ve Oracle'da tek bir satırın birden fazla kayıt içerebileceğini unutmayın ...
a_horse_with_no_name

Yanıtlar:


69

Joe Celko'dan alıntı yapmak için (bu referansı tüm web'de ve Wikipedia girişinde bulamazsınız , hatta bazı konferanslarda T-shirtlerde bile göreceksiniz):

Satırlar kayıt değildir.

Birçok insan onu mütevazi ve sözlü olarak yeni başlayanlara taciz etmekten hoşlanan sersemletici bir pislik olarak işaret ediyor. Ama onunla şahsen tanıştım - hatta onunla bir yemek paylaştığım - ve gerçek hayattaki kişiliğinin çevrimiçi cephesinden ne kadar farklı olduğunu söyleyemem. Bir keresinde onu satır kayıtları ararken yakaladım ve çok utandı ( burada tam sahne ).

Bu gömleği 2006'da Texas'ın Grapevine kentindeki PASS konferansına giydim.

Her durumda, adamın çevrimiçi karakteri hakkında ne yapacağınızı söyleyin, ancak standardı yazdı ve böyle bir otoritenin bir ayrım olduğunu belirttiği gerçeği size bir şey söylemeli. Birisi bir rekoru aradığında başıboş bıraktığı kadar, SQL Server dünyasında da uzman olan meslektaşlarımın birçoğunu yapın. Ve o kamptakiler de haklı olduğuna inanıyor.

Örneğin, açık bir SQL Server gurusu olan Itzik Ben-Gan. Eğitim Seti'ndeki ilk dersten bir alıntı: (Sınav 70-461): Microsoft SQL Server 2012'yi Sorgulamak :

T-SQL'deki yanlış terimlerin bir örneği olarak, insanlar genellikle "alan" ve "kayıt" terimlerini kullanarak T-SQL'in sırasıyla "sütun" ve "satır" dediklerini belirtir. Alanlar ve kayıtlar fizikseldir. Alanlar, istemci uygulamalarındaki kullanıcı arayüzlerinde bulunanlardır ve kayıtlar dosya ve imleçlerde bulunanlardır. Tablolar mantıklı ve mantıksal satır ve sütunlara sahipler.

Ve, Itzik'i tanımak, ona bir e-posta gönderirseniz veya bir konferansta köşeye sıkıştırırsanız, size aynısını söyler. Bir satıra kayıt diyorsanız, bence terminolojiyi doğru kullanmıyorsunuzdur.

Şimdi, her türden insanlarla dolu bir endüstri olarak, ikisi arasında çok ince farklar yaratan materyaller (başka bir cevapta gönderilen teknik hedef makaleleri gibi) ve muhtemelen sektörde birçok insanı bulabileceksiniz. aynı olduğunu düşünün (Microsoft'taki birkaç kişiyi ve sadece her zaman bir kayıt diyecek Brent Ozar gibi diğer insanları biliyorum). Bu onları doğru yapmaz, sadece bakma tarzlarıdır - aynı mantıklı ve fiziksel olarak görürler (en azından bu bağlamda) ve birçoğu muhtemelen geri kalanımızın sadece çok fazla zaman harcayan anal emekli olduklarını düşünüyorlar. anlambilim üzerine.

Hiçbir satıcı "onları arayacaksın {records | rows}" diyemediğinden, sonsuza dek bu argümanla uğraşacağız, çünkü her zaman mantıksal veya fiziksel olarak mantık alamayan veya farklı bir şekilde öğretilen biri olacak veya Erişim veya programlama kökenden gelir, vb. Bazı insanların bir araya geldiği gibi, diğerlerinin de "tomah-to" dediği gibi, her zaman "aynılar" dan "aynı" ya kadar tamamen farklı olan çeşitli insanlar olacaktır. "- ve aradaki birçok ton. Yine, bu hiçbirini doğru yapmıyor çünkü kimse bu konuda en üst düzey otorite olamaz. Ancak, SQL Server alanında kesinlikle bir çoğunluk var.


Yani, IMHO, bir tablodaki verilerden söz ederken, buna bir satır diyorsunuz. Bir ekleme yaparken, tabloya bir satır ekliyorsunuzdur. Bir güncelleme çalıştırdığınızda, tablodaki bir satırı güncelliyorsunuz. SELECT gerçekleştirdiğinizde, bir tablodan satır alıyorsunuz.

Başvurunuz eline geçtikten sonra rekor aramaktan çekinmeyin. Ama "Bir kayıt ekledim" derseniz sinirlenmeyin ve biri sizi düzeltir.


33

Microsoft, kuruluşlarında çeşitli yerlere, her masa girişi için tablo veri depolaması için resmi adının (kendi amacımı yerine getiren bir taksonomik tanımın yazılması için) "ROW" olarak adlandırılması koşuluyla sahiptir. Ben delil olarak sunmak ROW_NUMBER, ROWCOUNT, ROWVERSIONve DataTable.Rowsbir özellik, DataTableTSQL "tablo" nesnenin bir C # temsilidir. Bu durumda, MSDN özellikleri bir bütün olarak row, tablodaki bir giriş olan veri koleksiyonuna atıfta bulunulmasını teşvik eder . (notun, sorunun amacı olduğunu tanımlamak için "kayıt" veya "satır" kullanmaktan kaçınmaya çalıştığımı not edin)

Ancak, parlance bir uygulamanın kullanıcı "kayıt" ile ilgileniyor olmasıdır. Tek bir depolama sırasının doğrudan temsil edemeyeceği bir kayıt hakkında benzersiz olan bir şey, bir kaydın alt kayıtlara sahip olmasıdır. Doğru, bir tablonun bire bir tabloları olabilir, ancak bunlar bitişik olarak depolanmaz, ancak mantıksal olarak ilişkili olarak depolanır.

Yani, satır tablodaki, kayıt ise geliştiricinin pratik kullanımda çalıştığı şeydir.


8
Biri, SATIR'ın mantıksal varlık, KAYIT ise fiziksel varlık olduğunu iddia edebilir. Bir ROW birden fazla kayda sahip olabilir: biri kümelenmiş dizinde, biri NC dizinlerinde. Sayfaya sığmayan bir satır, sayfadaki kayıt ile SLOB depolama alanındaki taşma kayıtları arasında bölünebilir. Bir satırdaki alanın BLOB değeri, BLOB deposundaki birkaç TEXT kaydını kapsayabilir. Bir yığındaki bir satır bir saplama kaydı ve bir ileri kayıttan oluşabilir. Vb vb.
Remus Rusanu,

O zaman, kelime kaydının kullanımını uygulama alanından tamamen kaldırmış ya da suları tamamen karıştırmış ve bizi tanımlanabilir terimlerden ve teorik veri tabanı tasarımı ve uygulama detaylarına aldınız. İyi puanlar elde edersiniz, ancak okuyucuların% 80'inin rahat edeceği uygulamalar ve veritabanları konvansiyonundan, cevabım hala geçerli.
jcolebrand

4
Cevabınla çelişmiyorum, belki de yanlış söylüyorum. SQL Engine'in kendisi tarafından olayların nasıl göründüğünü, fiziksel erişim katmanının 'kayıt' olarak adlandırdığı yerde 'satırları' işleyen sorgu işleme (dil) katmanını sundum.
Remus Rusanu,

Anlıyorum. Hala suları çamurluyor gibi hissediyorum. Alınma, seni temin ederim.
jcolebrand

31

Az önce tüm RDBMS'lerin uyguladığı SQL için ANSI standardını tanımlayan "Bilgi teknolojisi - Veritabanı dilleri - SQL Bölüm 2: Temel (SQL / Foundation)" belgesini aradım.

Kelime row, beklendiği gibi, öncelikle belge boyunca birkaç yüz kez kullanılır.

Bu kelime recordyalnızca Oracle PL / SQL'de kullanılan bir kayda benzer bir kaydı tanımlamak için kullanıldı (özellikle ADA kayıt veri türlerini tanımladı). 6 belgede bahseder.

Bunun bu soruyu temizlediğini ve her iki taraftaki çeşitli argümanlara cevap verdiğini düşünüyorum.


ilave bilgi

Wiscorp.com adresinde bulabileceğiniz (serbestçe temin edilebilen en son sürümün) bir SQL standardının bir kopyasından (sayfa SQL Standartları'nın daha eski sürümleri ve revizyonları vardır).

Arama 7IWD2-02-Vakfı-2011-12.pdf bir tarihle, 2011-12-21 kelime ortaya koymaktadır satır kelime iken belgede 2277 kez geçiyorsa rekor , sadece 21 kez görünen ya fiil olarak "kayıt" veya sondaki bazı eklerde, SQL veri tipleri ve ana bilgisayar dil tipleri (Ada, Pascal) için veri tipi yazışmalarının özelliklerinde.

Dahası, aynı belge sayfa 57’de (benimki vurgusu) var:

4.15.1 Tablolara giriş

Bu Fıkra, ISO / IEC 9075-9'daki Fıkra 4.10.1, “Tablolara giriş” ile değiştirilir.

Tablo, her satırın bir veya daha fazla sütun değerinin bir dizisi olduğu sıfır veya daha fazla satır koleksiyonudur . Bir satırın en belirgin türü bir satır türüdür. Belirli bir tablonun her satırı , aynı tablonun satır türü olarak adlandırılan aynı satır türüne sahiptir. Bir tablodaki her satırın i-inci alanının değeri , tablodaki o satırın i-inci sütununun değeridir . Satır, bir tabloya eklenebilecek ve bir tablodan silinebilecek en küçük veri birimidir.

Bir tablonun derecesi ve satırlarının her birinin derecesi , o tablonun sütun sayısıdır. Bir tablodaki satır sayısı , önem derecesidir. Kardinalitesi 0 (sıfır) olan bir tablonun boş olduğu söylenir.

Bir masa ya bir taban masası , türetilmiş bir masa ya da geçici bir masadır .


SQL kullanan DBMS'ler söz konusu olduğunda:

Satırlar kayıt değildir , alanlar sütun değildir, tablolar dosya değildir!


14

İlişkisel veritabanları izolasyonda nadiren kullanıldığından, diğer sistem parçaları arasında karışıklığı önlemek için daima tablolara, satırlara ve sütunlara atıfta bulunuyorum. Bir istemci uygulamalarında, genellikle veri okuyucular, veri kümeleri, veri satırları, veri tabloları, vb. Gibi diğer yapılara sahibiz - örneğin "alan" genellikle ekran veri girişi için kullanılır ve Pascal, C'deki yapıya benzer bir Kayıt veri türüne sahiptir. .

Bazen bir sistem tasarımında, "Kayıt" fikri, tek bir satırdan daha geniş bir şey ifade etmek için kullanılabilir. Bir satır olabilir ve tarihi. Silinen bir satır hakkında konuştuğumuz gibi, sadece bir sütunla silinmiş olarak işaretlenmiş veya silinmiş bir tabloya "taşınmış" olarak işaretlenmiş bir satır anlamına da gelebilir (ve sadece var olmayanlar için oldukça zor olan bir satırın olmaması gibi) sıkıştırmak). Kayıt teriminin daha çeşitli kullanımları vardır.

Tablolar, satırlar ve sütunlar genel olarak bu varlıklara ilişkisel veritabanlarında atıfta bulunmak için, Codd ve Date tarafından yazılmış makaleler ve çalışmalar dahil olmak üzere kabul edilen terminoloji olarak kabul edilir ve veritabanı uzmanlarının çoğu bu terminolojiyi daha belirsiz olduğu için tercih eder.

Genellikle biri satırlar ve sütunlardan bahsettiğinde belirsizlik olmaz - diğer insanlar sizin fiziksel alt yapıdaki fiziksel tasarımdan bahsettiğinizi anlar ve fiziksel tasarımdan önce bir mantıksal tasarımdan veya daha sonra ortaya çıkan bir sistem varlığından başka herhangi bir yapay üründen bahsettiğinizi anlamazlar. ekran.


9

Sorunuz zaten çok iyi cevaplanmış olmasına rağmen. Ben de puanlarımı eklemek istiyorum. Belki bir dereceye kadar yararlı buluyor olabilirsiniz. Ayrıca cevabım SQL Server'a özgü değil

Bu kelimeler birbirlerinin yerine kullanılır.

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

Column =  Field   =  Attribute    =  Attribute

table  =  File    =  Relation     =  Entity Types(or Entity Set)
  • ER-Modüllerini öğrendiğimizde 4 terminoloji kullanımı iyidir
  • 3 İlişkisel Model kullanırken kullanın
  • 2 genel sahne, DataBase books start with these terminologyçünkü bunlar gerçek hayatta insanlar tarafından da yaygın olarak dosya sisteminde kullanılıyor.

Kayıt , depolama sistemindeki dolaylı anlamı olan temel birimdir. DBMS'de, recordbölümdeki kelime kullanımı, veritabanı tablolarının disk bloklarında nasıl depolandığını açıklar. DBMS'de a record-oriented file-system, dosyaların kayıtların koleksiyonu olarak depolandığı bir dosya sistemidir.


9

Dil gelişmeye devam ediyor. Birkaç on yıl önce okuryazar insanlar daha basit “dizinler” yerine “endeksleri” kullandılar. “Dizinlere” geçtiğimizde gereksiz bir komplikasyondan kurtulduk ve dili daha kullanışlı hale getirdik. "İndeks" için çoğulları ezberlemek ihtiyacı tamamen tepeydi - hiçbir şekilde iletişim kurmamıza yardımcı olmadı. Hata yapma, eskiden "endeks" e geçenleri düzeltmekten hoşlanan dilbilgisi Nazileri vardı. Tabii ki, dilbilgisi Nazileri kaybetti. Bu, Occam'ın jiletinin, eğer her şey yeterince uzun süre kalırsa, işe yaramaz ayrıntıları elimine ediyor.

Bu yüzden bunu kolaylaştıralım - satırlar ve kayıtlar arasındaki farkı bilmek veritabanlarını geliştirme ve sürdürme yeteneğimize kesinlikle hiçbir şey katmaz. Pek çok mükemmel profesyonel, satırları ve kayıtları birbirinin yerine kullanır, ancak harika sistemler geliştirir. Bu nedenle, Occam'ın tıraş bıçağı nihayetinde bu ayrımı ortadan kaldırmalı ve gelecek nesil daha az işe yaramaz bir gerçek öğrenmeli. Tabii ki, o zamanlar SQL hala geçerliyse.


5

CJ Date'in "Veri Tabanı Sistemlerine Giriş" kitabını alıntılamak "" Böyle bir tablonun satırları dosyanın kayıtları olarak düşünülebilir ... "

Yani, veritabanları için, Row.


4

Kısa cevap :

  • Bir kayıt, depolanmış (veya toplanmış) verilerin bir parçasıdır.
  • Bir satır, doğrusal olarak depolanan bir kayıttır.
  • Mümkün olduğunda, daha spesifik bir terim kullanın.

Not: tablolar kayıtları doğrusal olarak depolar ve sorgular sonuçları doğrusal olarak döndürür

Destek :

Web'den ek tanımlar:

  • SQL "satır" ( 1 , 2) )
  • SQL "kaydı" ( 1 , 2 )
  • "kayıt" ( 1 , 2 , 3 , 4 )
  • "satır" ( 1 , ayrıca bakınız 2 , 3 , 4 )
  • Satır vs StackOverflow'a karşı Kayıt ( 1 , 2 )

SQL tanımlarının genellikle İngilizce tanımı takip etmesi dikkat çekicidir.

Burada olması gerektiğini düşündüğünüz bir tanımınız varsa, lütfen yorumlara ekleyin.
Özellikle SQL standardındaki tanımlar veya bir uygulamanın dokümantasyonu ile ilgileniyorum.

Alıntı "Satırlar kayıt değildir" ifadesi getirildi. Bağlam dışı ele alındığında, bu benim önceki iddialarıma (ve birçok veritabanı uzmanınınkilere) aykırı görünüyor. Ancak, tüm yazıyı ( 1 Alıntı için ara) Joe Celko'nun (aka - CELKO--) okuduysanız, Joe Celko'nun, Joe Celko'nun şahıstan kaynaklandığına inandığı bir bireyi yanlış algılamayı düzeltmeye çalıştığı anlaşılıyor. " ... geleneksel dosya sistemleriyle veri işlemede geçmiş ... ". Kısacası Joe Celko, SQL satırlarının diğer sistemlerdeki kayıtlarla aynı şekilde çalışmadığını söylüyor. Joe Celko, bir terimin tanımlanma hakkı / imtiyazı olduğunu iddia etmiyor, ilkeleri bir depolama modelini diğerine yanlış uygulayarak getirilen bir yanlış anlayışı gidermeye çalışıyor.


3
İşe minnettarım ve buna dahil olduğunu düşündüm. Celko'nun farklılaşmasının, RDBMS ile RDBMS'den önceki düz dosya-COBOL sistemleri arasındaki farkları ortaya çıkarması gerektiğini not edeceğim. Ergo, RDBMS şemasının bir parçası olarak "sırayı" ve düz bir dosyanın bir parçası olarak "kaydını" vurguluyor.
saat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.