SQL Server에 날짜와 시간을 추가하는 것에 대해 다소 무질서한 질문 이 있었는데 다소 분류 론적 토론을 시작했습니다.
그렇다면 이러한 관련 용어를 어떻게 구별하고 올바르게 사용하는 방법은 무엇입니까?
열
기록
SQL Server에 날짜와 시간을 추가하는 것에 대해 다소 무질서한 질문 이 있었는데 다소 분류 론적 토론을 시작했습니다.
그렇다면 이러한 관련 용어를 어떻게 구별하고 올바르게 사용하는 방법은 무엇입니까?
열
기록
답변:
Joe Celko를 인용하려면 (이 참조는 웹 전체와 Wikipedia 항목 에서 찾을 수있을뿐만 아니라 일부 컨퍼런스의 티셔츠에서도 볼 수 있습니다).
행은 레코드가 아닙니다.
많은 사람들이 그를 초보자를 겸손하고 말 그대로 남용하는 것을 좋아하는 장난 꾸러기라고 지적합니다. 그러나 나는 또한 그를 직접 만나고 심지어 그와 식사를 공유했습니다. 그리고 그의 실제 인물이 그의 온라인 전선과 얼마나 다른지 말할 수 없습니다. 나는 한 번도 그에게 행 레코드를 호출하는 것을 붙 잡았고 그는 매우 당황했습니다 ( 여기서 전체 배경 이야기 ).
어쨌든, 당신은 그 남자의 온라인 캐릭터에 대해 당신이 무엇을 할 것인지 말하지만, 그는 표준 을 썼다 . 그리고 누군가가 행을 기록 할 때 그는 울부 짖습니다. SQL Server 세계의 전문가이기도 한 많은 동료들도 마찬가지입니다. 그리고 그 수용소에있는 사람들은 그가 옳다고 믿습니다.
예를 들어 Itzik Ben-Gan은 명백한 SQL Server 전문가입니다. 다음은 교육 키트 (시험 70-461)의 첫 번째 강의에서 인용 한 내용입니다 . Microsoft SQL Server 2012 쿼리 :
T-SQL에서 잘못된 용어의 예로 사람들은 종종 "필드"및 "레코드"라는 용어를 사용하여 T-SQL이 각각 "열"및 "행"이라고하는 것을 나타냅니다. 필드와 레코드는 물리적입니다. 필드는 클라이언트 응용 프로그램의 사용자 인터페이스에 있고 레코드는 파일과 커서에 있습니다. 테이블은 논리적이며 논리적 행과 열이 있습니다.
그리고 Itzik을 알고, 당신이 그에게 이메일을 보내거나 회의에서 그를 구석에 놓으면 그는 행복하게 당신에게 말할 것입니다. 그의 의견으로는 행을 레코드라고 부르면 용어를 올바르게 사용하지 않는 것입니다.
이제 모든 종류의 사람들로 가득 찬 산업이기 때문에 두 가지를 매우 미묘하게 구분하는 것처럼 보이는 (예 : 다른 답변에 게시 된 기술 대상 기사와 같은) 자료를 찾을 가능성이 높습니다. 그것들을 동일하게 생각하십시오 (Microsoft의 여러 사람들과 Brent Ozar와 같은 다른 사람들은 항상 그것을 레코드라고 부릅니다). 그것은 그것들을 옳게 만드는 것이 아니며, 단지 그것을 보는 방법 일뿐입니다-그들은 논리적이고 물리적 인 것을 (적어도이 맥락에서) 동일하게 생각하며 많은 사람들은 아마도 우리의 나머지는 너무 많은 시간을 소비하는 항문 보유자라고 생각합니다 의미론에.
어떤 벤더도 "당신은 {records | rows}라고 부를 수 없다"고 말하지 않기 때문에, 우리는 항상이 주장을 다룰 것입니다. 왜냐하면 논리적 대 물리적을 얻지 못하거나 다르게 가르친 사람이 항상 있기 때문입니다. Access 또는 프로그래밍 배경 등에서 나왔습니다. 일부 사람들이 maymay-to라고 말하고 다른 사람들이 tomah-to라고 말한 것처럼, "같은 사람"에서 "완전히 다른 사람"까지 다양한 사람들이 항상있을 것입니다 "-그리고 그 사이에 많은 색조가 있습니다. 다시 말하지만, 아무도 이것에 대한 궁극적 인 권위가 될 수 없기 때문에 그들 중 어느 것도 올바르게하지 않습니다. 그러나 SQL Server 공간에는 분명히 대다수가 있습니다.
IMHO, 테이블에있는 데이터에 대해 이야기 할 때는 행이라고합니다. 삽입을 수행 할 때 테이블에 행을 삽입합니다. 업데이트를 실행하면 테이블에있는 행이 업데이트됩니다. 그리고 SELECT를 수행하면 테이블에서 행을 검색합니다.
신청서가 보류되면 언제든지 전화로 기록하십시오. "내가 레코드를 삽입했습니다"라고 말하면 화 내지 마십시오. 누군가가 당신을 바로 잡습니다.
Microsoft는 조직 내 여러 위치에서 테이블 항목 당 테이블 형식 데이터 저장소의 공식 이름 (내 목적에 맞는 분류 학적 정의를 만들어 냄)을 "ROW"라고합니다. 나는 증거로 제출 ROW_NUMBER
, ROWCOUNT
, ROWVERSION
그리고 DataTable.Rows
A는 부동산, DataTable
TSQL "테이블"개체의 C #을 표현입니다. 이 경우 MSDN 속성은 전체적으로 row
테이블의 한 항목 인 데이터 모음을 참조 하는 것이 좋습니다 . (이를 정의하기 위해 "레코드"또는 "행"을 사용하지 않도록 노력하고 있습니다.
그러나이 용어는 응용 프로그램이 사용자 "레코드"를 처리한다는 것입니다. 단일 스토리지 행으로 직접 표현되지 않을 수있는 레코드에 대해 고유 한 것은 레코드에 서브 레코드가있을 수 있다는 사실입니다. 사실, 테이블은 다 대일 테이블과 관련이있을 수 있지만 연속적으로 저장되지는 않지만 논리적으로 관련되어 저장됩니다.
따라서 행은 테이블에있는 것이며 레코드는 개발자가 실제로 사용하는 작업입니다.
방금 모든 주요 RDBMS에 의해 구현 된 SQL의 ANSI 표준을 정의하는 "정보 기술-데이터베이스 언어-SQL 파트 2 : 기초 (SQL / 파운데이션)"문서를 검색했습니다.
이 단어 row
는 예상대로 문서 전체에서 주로 수백 번 사용됩니다.
이 단어 record
는 Oracle PL / SQL에서 사용 된 레코드 (특히 ADA 레코드 데이터 유형 설명)와 유사한 레코드를 설명하는 데만 사용되었습니다. 문서에 6 개의 언급.
나는 이것이이 질문을 지우고 양쪽의 다양한 주장에 대답한다고 생각합니다.
추가 정보
wiscorp.com (SQL Standards 페이지에는 다른 여러 가지 이전 버전 및 개정판 페이지가 있음)에서 찾을 수있는 (최근 무료로 제공되는) 초안 SQL 표준의 사본에서 제공합니다.
2011-12-21 날짜로 7IWD2-02-Foundation-2011-12.pdf를 검색하면 문서에 단어 행 이 2277 번 나타나고 단어 레코드 가 동사 "레코드"로 21 번만 나타납니다 또는 끝 부분의 일부 부록에서 SQL 데이터 유형 및 호스트 언어 유형 (Ada, Pascal)에 대한 데이터 유형 대응의 스펙을 참조하십시오.
또한, 동일한 문서는 57 페이지에 있습니다 (강조 광산).
4.15.1 테이블 소개
이 절은 ISO / IEC 9075-9의 4.10.1 절“테이블 소개”에 의해 수정되었다.
테이블은 각 행이 하나 이상의 열 값 시퀀스 인 0 개 이상의 행의 모음입니다 . 행 의 가장 구체적인 유형은 행 유형입니다. 주어진 테이블의 모든 행 은 해당 테이블의 행 유형이라고하는 동일한 행 유형을 갖습니다. 테이블에있는 모든 행 의 i 번째 필드 값은 테이블에있는 해당 행 의 i 번째 열 값입니다 . 행은 테이블에 삽입하고 테이블에서 삭제할 수있는 가장 작은 데이터 단위입니다.
테이블의 정도와 각 행 의 정도 는 해당 테이블의 열 수입니다. 테이블 의 행 수 는 카디널리티입니다. 카디널리티가 0 인 테이블은 비어 있다고합니다.
표 하나 인 기본 테이블 하는 파생 테이블 또는 임시 테이블 .
SQL을 사용하는 DBMS에 관한 한 :
행은 레코드가 아니며 필드는 열이 아니며 테이블은 파일이 아닙니다!
관계형 데이터베이스는 단독으로 사용되는 경우가 거의 없으므로 시스템의 다른 부분 간의 혼동을 피하기 위해 항상 테이블과 행 및 열을 참조합니다. 클라이언트 응용 프로그램에는 일반적으로 데이터 리더, 데이터 세트, 데이터 행, 데이터 테이블 등을 포함한 다른 구성이 있습니다. 예를 들어 "field"는 화면 데이터 입력에 자주 사용되며 Pascal에는 C의 구조체와 유사한 레코드 데이터 유형이 있습니다. .
때때로 시스템 설계에서 "레코드"라는 개념은 단일 행보다 넓은 것을 의미하는 데 사용될 수 있습니다. 행일 수도 있고 역사 일 수도 있습니다. 삭제 된 행에 대해 이야기 할 때, 단순히 열로 삭제 된 것으로 표시되거나 삭제 된 테이블로 "이동"된 행을 의미 할 수 있습니다. 을 핀으로 꽂다). 레코드라는 용어가 더 다양하게 사용되었습니다.
테이블, 행 및 열은 일반적으로 논문 및 날짜 별 논문 및 작업을 포함하여 관계형 데이터베이스에서 이러한 엔티티를 참조하기 위해 사용되는 용어이며, 대부분의 데이터베이스 전문가는이 용어를 더 명확하게 선호합니다.
행과 열에 대해 말할 때 일반적으로 애매 모호한 것이 없습니다. 다른 사람들은 기본 데이터베이스 물리적 디자인에 대해 이야기하고 있다는 것을 이해합니다. 화면.
귀하의 질문에 이미 잘 대답했지만. 내 포인트도 추가하고 싶습니다. 일부 확장까지 도움이 될 수 있습니다. 또한 내 대답은 SQL Server에만 국한되지 않습니다
이 단어들은 서로 바꿔 사용할 수 있습니다.
1 2 3 4
--------------------------------------------------------------------
Row = Record = Tuple = Entity
Column = Field = Attribute = Attribute
table = File = Relation = Entity Types(or Entity Set)
DataBase books start with these terminology
이들은 실제 사람들이나 파일 시스템에서 매우 일반적으로 사용되기 때문입니다. 레코드 는 내재적 의미를 갖는 스토리지 시스템의 기본 단위입니다. DBMS record
에서 장에서 사용 되는 단어 는 데이터베이스 테이블이 디스크 블록에 저장되는 방법을 설명합니다. DBMS에서 a record-oriented file-system
는 파일이 레코드 콜렉션으로 저장되는 파일 시스템입니다.
언어는 계속 발전하고 있습니다. 수십 년 전에 문맹 인들은 단순한 "인덱스"대신 "표시"를 사용했습니다. "인덱스"로 전환하면서 불필요한 복잡성을 제거하고 언어를 더욱 유용하게 만들었습니다. "인덱스"에 대해 복수형을 암기해야 할 필요성은 순수한 오버 헤드였습니다. 어떤 방식 으로든 커뮤니케이션에 도움이되지 않았습니다. 실수로, "지수"로 바꾼 사람들을 교정하는 것을 즐기는 문법 나치가있었습니다. 물론, 나치 문법은 사라졌습니다. 이것이 Occam의 면도기가 모든 것이 충분히 오래 유지되면 쓸모없는 세부 사항을 제거하는 방법입니다.
따라서 행과 레코드의 차이점을 알면 데이터베이스를 개발하고 유지 관리하는 데 전혀 도움이되지 않습니다. 많은 우수한 전문가들이 행과 레코드를 서로 바꾸어 사용하지만 멋진 시스템을 개발합니다. 따라서 Occam의 면도기는 그 차이를 없애야하며, 차세대는 쓸모없는 사실을 배워야합니다. 물론 SQL이 여전히 관련이 있다면.
짧은 답변 :
참고 : 테이블은 레코드를 선형으로 저장하고 쿼리는 결과를 선형으로 반환합니다.
지원 :
웹 전체의 추가 정의 :
SQL 정의는 일반적으로 영어 정의를 따릅니다.
여기에 있어야한다고 생각되는 정의가 있으면 주석에 추가하십시오.
특히 SQL 표준의 정의 또는 구현 문서에 관심이 있습니다.
"행은 레코드가 아닙니다."라는 인용문이 표시되었습니다. 문맥에서 벗어나면 이전의 주장 (및 많은 데이터베이스 전문가의 주장)과 모순되는 것처럼 보입니다. 그러나 Joe Celko (일명 --CELKO--) 의 전체 게시물 ( 1 인용문 검색)을 읽으면 Joe Celko가 Joe Celko가 개인의 " ... 전통적인 파일 시스템을 사용한 데이터 처리의 배경 ... ". 간단히 말해서 Joe Celko는 SQL 행이 다른 시스템의 레코드와 동일하게 작동하지 않는다고 말합니다. Joe Celko는 용어 정의에 대한 권리 / 권한을 주장하지 않으며, 한 스토리지 모델에 다른 스토리지 모델을 잘못 적용하여 발생하는 미스 이해를 해결하려고합니다.