복붙노트

[SQL] LINQ to SQL은이 점을 놓치지 않는다? (등 음속) ORM - 매퍼 하위 최적의 솔루션이 아닌가요?

SQL

LINQ to SQL은이 점을 놓치지 않는다? (등 음속) ORM - 매퍼 하위 최적의 솔루션이 아닌가요?

내가 LINQ to SQL은 다른 ORM 매퍼에 대해 했어 몇 가지 생각에 지역 사회의 테이크 싶습니다.

LINQ to SQL은 당신의 네이티브 개발 혀에 (일반적으로 또는 CRUD 작업) 데이터 액세스 로직을 표현하는 것이 아니라 C # 및 SQL 사이의 "임피던스 불일치"를 다루는 데의 생각처럼 I. 예를 들어, 비즈니스 계층에 대한 이벤트 인스턴스의 ObjectDataSource를 호환 목록을 반환, 우리는 사용

return db.Events.Select(c => new EventData() { EventID = c.EventID, Title = c.Title })

내가 구현한다면이 된 SQL - 투 - C # 구문을 사용하여, 나는 (이하 "@EventID"인수를 설명하는 문자열을 사용) 이벤트 ID 매개 변수를 추가, 명령 클래스를 생성해야 할 것이다는에 SQL 쿼리 문자열을 추가 Command 클래스, 명령을 실행 한 다음 각 반환 필드 값을 끌어 내 EVENTDATA 클래스 (우웩)의 새로 생성 된 인스턴스의 멤버에 할당 (캐스트 형) nwReader [ "필드 명을"]를 사용하세요.

그래서, 그 사람들이 왜 같은 Linq에 / 음속 / 등이다. 나는 동의한다.

그러나, 더 큰 그림에 내가 잘못 것들의 숫자를 참조하십시오. 내 감각은 마이크로 소프트도 뭔가 잘못을보고 그들이 SQL Linq에 사망하고 엔티티에 Linq에 사람들을 이동하려는 이유는 것입니다. 만, 나는 마이크로 소프트가 두 배로 다운되는 나쁜 내기에 생각합니다.

그래서, 잘못은 무엇인가?

문제는 진정한 데이터 관리 도구 아니라고 아키텍처 LINQ to SQL은 볼 특히 마이크로 소프트의 우주 비행사, 그리고 실현이 있다는 것입니다 : 거기에 당신이 C #에서 쉽게 편안하게의 할 수없는 많은 일들이 여전히 그들은 그것을 해결하는 것을 목표로 . 이, 엔티티 Linq에 뒤에 야망에 나타난 Linq에의 혁명적 성격과도 LinqPad 도전에 대한 글을 블로그를 참조하십시오.

그리고 그와 함께 문제는 SQL이 문제가 있다고 가정합니다. (SQL 또는 이와 유사한 LINQ를) 반창고가 잘 할 것이다 때 즉, 온화한 불편 (SQL 및 C # 사이의 임피던스 부정합)을 줄이기 위해, 마이크로 소프트는 우주복 (전체 격리)의 등가를 제안했다.

최대한 멀리 볼 수있는 개발자는 관계형 모델을 마스터하고 자신의 개발 노력에 지능적으로 적용하는 매우 스마트 충분합니다. 사실, 더 하나를 가서 등 SQL, 음속에 Linq에 이미 너무 복잡 것을 말할 것입니다 : 학습 곡선은 SQL 자체를 마스터에서 그렇게 많이 다르지 않다. 당분간, 개발자가 SQL과 관계형 모델을 마스터해야하기 때문에, 우리는 이제 두 개의 쿼리 / CRUD 언어 학습에 직면하고 있습니다. 설상가상으로, Linq에는 (쿼리 윈도우가없는) 시험에 어려운 경우가 많습니다 우리가 (이 SQL을 생성)하고있는 실제 작업에서 우리에게 하나 개의 층을 제거하고, SQL이 같은 구축합니다 (최고의) 매우 서투른 지원합니다 날짜 처리 (예 참조 DateDiff), "데", 심지어 "그룹으로".

대안은 무엇인가? 개인적으로, 나는 엔티티에 Linq에 같은 데이터 액세스를위한 다른 모델이 필요하지 않습니다. 난 그저, Visual Studio에서 창을 팝업 입력 및 SQL을 검증 한 후 생성하거나 전화를 캡슐화하기 위해 C # 클래스를 보완 할 수있는 버튼을 눌러 원합니다. 당신이 이미 SQL을 알고 있기 때문에, 아니 그냥 이런 식으로 뭔가를 입력하는 것을 선호합니다 :

Select EventID, Title From Events Where Location=@Location

A는) 속성과 B와 이벤트 ID 및 제목 필드가 포함한다는 EVENTDATA 클래스와 끝까지) 인수로 '위치'문자열을 사용 팩토리 메소드를 가지고 있으며, 그 목록 를 생성? 당신은 객체 모델 (위의 예는 분명히 그 다루지 않는다)하지만 나에게 임피던스 부정합 호소 큰 거래를 제거하면서 여전히 SQL을 사용하는 기본적인 방법에 대해 신중하게 생각해야 할 것이다.

질문 : 오전 I의 잘못? 당신은 더 이상 SQL / 관계형 데이터 관리를 배울 필요가 없도록해야한다 마이크로 소프트는 SQL 인프라를 재 작성? 그들은이 방법으로 SQL 인프라를 다시 작성할 수 있습니까? 또는 당신은 SQL의 상단에 아주 얇은 층이 매개 변수를 설정하고 매우 충분 데이터 필드를 액세스의 고통을 제거 할 수 있다고 생각하십니까?

업데이트 나는 그들이 내가 후에 누구인지의 중요한 측면을 캡처 할 생각하기 때문에 상단에 두 개의 링크를 촉진하고 싶었다. 첫째, 제목의 기사 밖으로 CodeMonkey 포인트 "컴퓨터 과학의 베트남." 그것은 시작하는 데 시간이 걸리지 만 매우 흥미로운 읽기입니다. 둘째, Spolsky 조엘의 두드러진 부분 중 하나 AnSGri 포인트 : 새는 추상화의 법칙. 이 주제에 정확히 아니지만 가깝고 좋은 읽기입니다.

2 업데이트 : 여기 저기 많은 훌륭한 답변하며 "오른쪽"대답의 선택은 순전히 주관적이지만 내가 ocdecio하기 위해 "답"을 부여했습니다. 이 경우, 그의 대답은 내가 진정으로 기술의 현재 상태에 주어진 가장 좋은 방법입니다 생각으로 제곱. 이것은 내가 완전히 일이 잘 변경 될 수 있도록하지만, 진화를 기대하는 영역입니다. 내가 사려 깊은 대답을했다 생각, 내가 upvoted 한 모든 사람에 기여 감사 모든 사람에게 싶습니다.

해결법

  1. ==============================

    1.프로젝션 : 이상 육년 동안 나는 아주 간단한 개념을 기반으로 내 자신의 ORM을 사용하고있다. 각 테이블은 클래스로 예상되며, SQL은 클래스 정의를 기반으로 실시간으로 생성됩니다. 아직 SQL을 알고 저를 필요로하지만 90 %의 간단한의 CRUD을 담당, 나는 결코 등의 연결을 관리 할 수 ​​없었다 - 그것은 주요 DB 벤더 작동합니다.

    프로젝션 : 이상 육년 동안 나는 아주 간단한 개념을 기반으로 내 자신의 ORM을 사용하고있다. 각 테이블은 클래스로 예상되며, SQL은 클래스 정의를 기반으로 실시간으로 생성됩니다. 아직 SQL을 알고 저를 필요로하지만 90 %의 간단한의 CRUD을 담당, 나는 결코 등의 연결을 관리 할 수 ​​없었다 - 그것은 주요 DB 벤더 작동합니다.

    내가 가지고 그것을 포기 어떤 가치를 찾을 수 없습니다로 만족 해요.

  2. ==============================

    2.나 나는 염색하는 데이터베이스 사람임을 말하여이 서문 보자.

    나 나는 염색하는 데이터베이스 사람임을 말하여이 서문 보자.

    심한 과잉 일반화로 : 개발자는 SQL을 모른다. 개발자는 정말 SQL을 알고 싶지 않아. 그들은 테이블을 디자인 할 수 있습니다, 그것을 쓸 수 있지만, 그들이 구역질 느낄 수 있습니다. 그들은 필요한 쿼리는 간단한 가입보다 더 때 어리석은 일을하는 경향이있다. 개발자는 바보 때문이 아니라 - 그들은 방해 할 수 있기 때문이다. 그들은 단지 하나 개의 개념 공간을 처리해야 세계에 살고있는 같은 그들은; 문맥은 지불처럼하지 않은 가격이 다시 전환됩니다 테이블에 개체에서 이동합니다.

    이것은 그들이 나쁜 또는 잘못된 의미하지 않는다; 그것은 개선을위한 기회가 의미합니다. 고객이 (이 경우, 귀하의 프레임 워크를 사용하여 개발자)하지 SQL과 테이블처럼 할 경우 - 그들에게 그들이 기본 혼란을 취급하지 않고 도망 수 있습니다 추상화 계층을 제공합니다.

    그것은 쓰레기 수집 / 자동 메모리 관리 대히트를하게 같은 논리입니다. 예, 개발자가 처리 할 수; 네, 그들은 더 나은없이 최적화 된 코드를 작성할 수 있습니다; 하지만 그들이 행복하고 더 생산하게 처리 할 필요가 없습니다.

  3. ==============================

    3.나는으로 ORMs의 인기는 개발자 데이터 레이어를 개발하고 적용 후 다시 응용 프로그램을 통해 같은 CRUD 코드를 작성 의해 산란 된 생각합니다. 으로 ORMs는 개발자가 대신 (희망) 응용 프로그램의 논리를 반복하고 농축 같은 SQL 문을 작성하는 시간을 줄일 수 있습니다 또 다른 도구 / 기술입니다.

    나는으로 ORMs의 인기는 개발자 데이터 레이어를 개발하고 적용 후 다시 응용 프로그램을 통해 같은 CRUD 코드를 작성 의해 산란 된 생각합니다. 으로 ORMs는 개발자가 대신 (희망) 응용 프로그램의 논리를 반복하고 농축 같은 SQL 문을 작성하는 시간을 줄일 수 있습니다 또 다른 도구 / 기술입니다.

  4. ==============================

    4.IMHO, OR / M은 '멀리 SQL을 추상화'또는 SQL을 숨기고, 또는 멀티 DBMS 지원을 가능하게 약이 아니다.

    IMHO, OR / M은 '멀리 SQL을 추상화'또는 SQL을 숨기고, 또는 멀티 DBMS 지원을 가능하게 약이 아니다.

    당신은 지루한 CRUD SQL 쿼리를 작성 소요되는 시간이 있기 때문에 그것은 문제의 도메인에 더 초점을 넣어 할 수 있습니다. 당신이 좋은 OR / M을 사용하는 경우이 필요한 것 같다 다른 한편, 만약이 OR은 / M은 SQL 쿼리를 작성 할 수 있도록해야한다.

    당신이 그것을 제대로 사용하는 경우 OR / M는 강력한 도구가 될 수 있습니다; 그것은 게으른로드, 다형성 질의 / associatons 돌볼 수 ... 나에게 오해하지 마십시오 당신이 표현 OO / 도메인 모델에 (잘 생각 정규화) 관계형 모델을 변환 처리를 직접 수행해야하는 경우,이 일반 SQL에 아무것도 잘못은, 그러나, 나는 당신이 배관을하고 많은 시간 수있는 좋은 방법입니다 지출 방법은 생각합니다.

    를 사용하여 OR / M은 또한이 현상 제는 SQL에 대한 지식이 없어야 가득 차거나 것을 의미하지 않는다. 반대로 사실이 이럴입니다. SQL을 아는 효율적인 SQL 쿼리를 작성하는 방법을 알고, 제대로 OR / M을 사용할 수 있도록 -imho- 것입니다.

    나는 또한 내가 마음에 NHibernate에 이것을 쓰고 있어요 인정합니다. 이것은 내가 기압 사용하고있는 OR / M을, 그리고 나는 엔티티 (아직)에 SQL 또는 Linq는 Linq에를 사용하지 않았습니다.

  5. ==============================

    5.LINQ의 디자인과 엔티티 프레임 워크에 LINQ는 확실히 ORM 도구로 사용이 있지만 큰 아이디어는 쿼리 데이터 소스에,뿐만 아니라의를 RDBMS 공통 API로 사용될 것입니다.

    LINQ의 디자인과 엔티티 프레임 워크에 LINQ는 확실히 ORM 도구로 사용이 있지만 큰 아이디어는 쿼리 데이터 소스에,뿐만 아니라의를 RDBMS 공통 API로 사용될 것입니다.

    내가 분명히 염두에 SQL 설계하면서, 그 LINQ를 읽고 기억, 데이터 저장소에 대한 쿼리 언어가 될하기위한 것입니다. 당신은 SQL을위한 LINQ 쿼리를 작성 할 수 있지만, 할 수도 있습니다 이론적으로 쓰기 LINQ 쿼리 대상 LDAP, 파일 시스템의 교환, 웹 서비스, 무한히 그. 당신은 그 프로그램에 대한 SQL을 사용할 수 없습니다.

    또한 거의 모든 데이터 저장소에 대해 다른 API를 배울 필요가있다. LINQ는 모든 사람에게 데이터 액세스 API를 만들 수있는 공통의 목표를 제공합니다.

    이러한 비전 작동 여부는두고 봐야 알 겠죠,하지만 생각입니다. 나는 점점 더 많은 우리가 L2E에 대한 몇 가지 아주 좋은 사용을 찾을 수 있습니다-간 운영에 우리가 시스템을 원하는대로 생각합니다.

    나는 그들을 다시 찾을 수 있다면 좀 참조를 추가합니다.

    http://laribee.com/blog/2007/03/17/linq-to-entities-vs-nhibernate/

  6. ==============================

    6.당신은 걱정 중지하고 ORM 사랑을 배워야한다. 이와 같은 추상화은 우리가 현장에서 우리의 기술과 메이크업의 발전에 초점을 도움이 될 것입니다.

    당신은 걱정 중지하고 ORM 사랑을 배워야한다. 이와 같은 추상화은 우리가 현장에서 우리의 기술과 메이크업의 발전에 초점을 도움이 될 것입니다.

    귀하가 취득한 기능 기술을 활용하고 응용 계층에 적용 할 여지는 여전히있다. 이것은 다른 ORM 년대를 통해 SQL에 LINQ의 장점 중 사실의 하나입니다.

    난 단지 다른 의견의 대부분에 동의 할 수 있습니다. 저장 시간은, 당신은 당신의 도메인 모델을 정제에 집중하고 더 나은 응용 프로그램을 만들 수 있습니다. 당신이 병목 현상을 정확히 일단 그리고, 최적화 된 SQL을 만드는 데 사용합니다.

    무엇 즉시 분명하지 않을 수도 것은 ORM 정말 좋은 수있는 기능의 번호와 함께 제공됩니다. 반복을 피 로딩 항목을하는 데 도움이 신원지도, 지연로드는 덜 배관과 도메인 및 작업 단위는 변경 및 최적화 데이터베이스 쓰기를 추적하는 데 도움을 표현하는 데 도움이됩니다.

  7. ==============================

    7.나는 100 % 동의합니다. 이 중 많은 기술을 코딩 절차 코딩 기술과 SQL은 매우 다른 사실의 결과이다; 이 사실은 널리 인정되지 않습니다. 그래서, 그 실현을 명중 할 때까지, 프로그래머는 하나 개의 도메인에서 다른 자신의 스킬 셋의 양도를 만들 수있는 방법을 검색합니다.

    나는 100 % 동의합니다. 이 중 많은 기술을 코딩 절차 코딩 기술과 SQL은 매우 다른 사실의 결과이다; 이 사실은 널리 인정되지 않습니다. 그래서, 그 실현을 명중 할 때까지, 프로그래머는 하나 개의 도메인에서 다른 자신의 스킬 셋의 양도를 만들 수있는 방법을 검색합니다.

    그것은 작동하지 않습니다.

    당신은 단순히 방법 위상 변화에 배워야한다 : 당신의 코드가 다르게 당신이 해결되는 도메인에 따라 생각하는 방법에 대해 알아 봅니다.

    다른 사람이 방법이 훨씬 더 복잡하고이 LINQ에 SQL에서 매핑 때 쿼리가됩니다 자세한 발견 했습니까? 마찬가지로, 온라인 예 모두?

  8. ==============================

    8.드미트리가 지적한 바와 같이, 개발자는 SQL을 모른다. 더 정확하게, 대부분의 노하우의 SQL은, 그러나 돈이라는 환상 (HM, 추상화를) 만들 수 Linq에 같은 것들에 대한 수요를 창출, 그들은 마법의 총알 검색하는 경향이 있으므로,하지 좋아해요 확실히 그것을 이해하지 않는다 't은 사랑하는 클래스에 비해 아무것도 다른를 사용합니다.

    드미트리가 지적한 바와 같이, 개발자는 SQL을 모른다. 더 정확하게, 대부분의 노하우의 SQL은, 그러나 돈이라는 환상 (HM, 추상화를) 만들 수 Linq에 같은 것들에 대한 수요를 창출, 그들은 마법의 총알 검색하는 경향이 있으므로,하지 좋아해요 확실히 그것을 이해하지 않는다 't은 사랑하는 클래스에 비해 아무것도 다른를 사용합니다.

    새는 추상화의 법칙은 항상 마찬가지로 즉, 아주 나쁜입니다.

    일부 ORM 솔루션은 분명한 좋은 (예를 들어, JPA / 최대 절전 모드)입니다,하지를 사용하기 때문에 당신은 SQL에 대해 걱정할 필요가 없습니다. 사실, 특히 능력을 조회, 일반적으로 JPA 효과적으로 당신은 매우 깊은 DB의 이해 필요를 사용합니다. 좋은 점은 그들이 처음부터 전체 데이터베이스를 자동 생성 지점으로, 기계가 지루한 작업을 수행 할 것입니다.

    SQL에 LINQ는, 내가 생각하는, 실제 문제가 해결되지 않습니다. 그것은 아무것도 더 많은 종류의 다른 프리젠 테이션입니다. 그것은 이미 복잡한 언어를 overcomplicates하지만 그것은 좋은 수 있습니다. 이 SQL-쿼리 컬렉션을의 종류이기 때문에 다른 한편으로는, 객체에 대한 Linq에 매우 흥미로운 개념이다.

  9. ==============================

    9.역사적 관점.

    역사적 관점.

    때 커드 등. 알. 원래 이론과 관계형 데이터베이스의 구현, 하나 완전히 분리 문제는 "어떻게 우리가 이런 일을 조회 할"이었다 밖으로 작동했다? 전략과 구문의 숫자는 다양한 강점과 약점에 제안했다. 후보자 중 하나는 (분명히, 그 초기 형태.) SQL이었다 또 다른 QBE (요청에 의한 예)이었다. 또 "이 quel"라고했다, 나는 믿는다 여러 사람이 있었다. 이 모든 다른 사람에게 우수한 평가를 받고 있었기 때문에 SQL은 확실히 지배적이되지 않았다. (가 동일한 데이터를 동시에 사용할 수 있기 때문에.) Unfornately하지만, 나머지는 거의 우리 모두의 빈곤, 사라졌다

    Microsoft는 이러한 다른 언어 중 하나를 부활하는, 또는 가치 추가를 발명 한 것을 좋은 이야기를 가지고 있다면, 나는 우리가 듣고 잘 조언 될 것이다 생각합니다. 그러나 지금까지 모두 내가 본 또 다른 "하나의 링 규칙 그들 모두"입니다.

    SQL 뒤에 생각과 엄격함의 많은 지옥, 시간 검증 된 내구성이 많이 있습니다. 마이크로 소프트는 틀림없이 최고 수준의 개발 조직은 우리의 공동 기관의 추억을 포함하여, 우리의 나머지 부분을-생각할 수 있다는 믿음의 특정 역사를 가지고 있습니다. 그런 식으로 작동하는 것이하지 않는 것 같습니다. 만큼 우리가 관계형 데이터 저장소에 결합하고, 우리는 동일하거나 더 나은 성능의 약속과 베어 메탈에서 떨어져 우리를 이동 상위 추상화 패러다임에 대해 두 번 생각해야한다.

  10. ==============================

    10.자신을 ORM 프로젝트의 저자이기 때문에, 나는이 같은 질문에 대한 내 대답은 조금 편향되기 쉽다는 것을 인정해야한다. 이미 어느 정도 고정하고있어 그래서 난 이미 전에 질문을 읽기에 대한 답변에 대한 내 자신의 생각의 일부를 개발했습니다.

    자신을 ORM 프로젝트의 저자이기 때문에, 나는이 같은 질문에 대한 내 대답은 조금 편향되기 쉽다는 것을 인정해야한다. 이미 어느 정도 고정하고있어 그래서 난 이미 전에 질문을 읽기에 대한 답변에 대한 내 자신의 생각의 일부를 개발했습니다.

    나는 ORM 개발을위한 나의 이유 때문에 SQL과 명령형 프로그래밍 사이의 "임피던스 불일치"의 아니었지만, 오히려 전적으로 데이터베이스 플랫폼 무신론자가되기위한 목적으로 말할 것입니다. 지속성을 관리 할 수있는 더 많은 코드를 작성할 필요의 이전 문제는 하나 개의 데이터베이스 공급 업체에 작업을하면 쉽게 해결 될 것 작은 장애물이다. 데이터베이스 플랫폼 무신론자가되는 것은 훨씬 더 도전적인 문제이며 IMO 나처럼 당신이 다른 사람에게 판매 소프트웨어 계획 (그냥 집에서 사용되지 않음) 가정 사업의 수익성에 훨씬 더 큰 영향을 미친다.

    나는 몇 년 전에 내 ORM 도구 작업을 시작했을 때, 개념 내 원하는 언어로 허무했다, 내가 말을 대부분의 사람들은 내가 작업을하고 지역 사회의 일부 존경받는 목소리가 많은 기사를 작성로 한 이유를 이해하지 못하기 내가 이미했던 것은 불가능할뿐만 아니라 바람직하지 않은뿐만 아니라이라고 주장 무역 잡지입니다. 같은 이유의 일부는 주어진 - 그것은 제한하는 것, 너무 복잡하고 오버 헤드가 추가됩니다. (용어 ORM의 정의에 대한 몇 가지 논의가 있지만) 오늘 같은 사회는 적어도 세 가지 인기있는 데이터베이스 추상화 도구가 있습니다. 나는 이러한 도구 작업을 시작했을 때, 원래의 반대는 그들이 지금보다 더 많은 체중을 수행하기 때문입니다 언급하는 이유. 하드웨어와 소프트웨어가 개입 년에 변경된 기본이되는 기술은 이러한 도구가 훨씬 더 실용적인 장기적으로 확인합니다. 내 경향이 시도하고 어쩌면 아직 매우 실용적이지하지만 그 실제 곧 될 것입니다 솔루션 소프트웨어와 작품의 긴 전망을하는 것입니다. 그래서 특정 문제에 대한 좋은 솔루션으로 엔티티에 LINQ를 계산하지 않을 것이라고 주어진.

    나는 또한 오히려 적은 것보다 더 많은 옵션을 선호하는 경향이있다. 내가 엔티티에 LINQ를 개발 뒤에 아이디어를 지원할 수 그래서 동안, 나는 LINQ는 엔티티에 사용할 수있게 되었기 때문에 SQL의 merelyu에 LINQ 죽이고 지원하기 위해 적은 경향이 있어요. 그 사람들이 "마법의 탄환"와 같은 특정 도구 나 소프트웨어 패러다임을보고 그 모든 것을 주장 할에 객체가 그것에 대해 의심의 여지가 없습니다, 객체가 할 일을 위해 중대하다 ... 내 (다시 바이어스) 의견으로는, 문제가 발생합니다 그런 식으로해야합니다. 이곳은 관계형 데이터베이스가 좋은 예 것으로보고, 특정 다른 작업을 처리하기에 매우 좋은 것으로 알려져있다. 당신은 자신을 강제하고하는 작업에 대한 비효율적 인 도구를 사용하기 때문에 그래서 내 의견으로는, 그것은 종류의 개체 수 있어야 그 모든 주장 발에서 자신을 촬영합니다. 그래서 SQL에 LINQ를 제거하기, 특히보고 및 추상화 반전 안티 패턴처럼 나에게 표면 소리에 적어도 엔티티 만 LINQ를 사용하여 관련하여.

    - 문제가 나사 인 경우 드라이버를 사용하여 문제가 못을 경우 망치를 사용 : 내 대답에 대한 개요를 추측 그래서이있다.

  11. ==============================

    11.개발자의는 SQL처럼하지 않는 것이 드미트리의 말은 진리의 많은이있을 수 있지만, 솔루션은 ORM 아니다. 이 솔루션은 개발 팀 개발 DBA의 일환으로 고용하는 것입니다. 내 회사에서 내 .NET 개발 팀은 전혀 생산 DBA 작업을하지 않는다 뛰어난 오라클 DBA 있습니다. 우리 팀에서 그의 역할은 데이터 모델링, 물리적 DB 설계 작성, 저장 발동, 데이터 분석 등 그는 우리 데시벨 측이 너무 깨끗하고 수행하는 이유입니다. 우리의 모든 DB 액세스 저장 발동를 통해입니다.

    개발자의는 SQL처럼하지 않는 것이 드미트리의 말은 진리의 많은이있을 수 있지만, 솔루션은 ORM 아니다. 이 솔루션은 개발 팀 개발 DBA의 일환으로 고용하는 것입니다. 내 회사에서 내 .NET 개발 팀은 전혀 생산 DBA 작업을하지 않는다 뛰어난 오라클 DBA 있습니다. 우리 팀에서 그의 역할은 데이터 모델링, 물리적 DB 설계 작성, 저장 발동, 데이터 분석 등 그는 우리 데시벨 측이 너무 깨끗하고 수행하는 이유입니다. 우리의 모든 DB 액세스 저장 발동를 통해입니다.

    개발 DBA는 무엇입니까? http://www.simple-talk.com/sql/database-administration/what-use-is-a-development-dba/

  12. ==============================

    12.나는 시간이 잘 소비되는 저장 - 프로 시저를 기반으로 데이터 액세스 레이어를 개발하기 위해 시간을내어 같은 데이터베이스와 분산 응용 프로그램 (웹 및 컴파일)과 느낌을 모두 않습니다. 개인적으로, 나는 데이터 모델링을하고 초기 개발 과정에서 필요한 발동을 식별하는 것을 선호 ... 디자인 / 인터페이스 로직 / 구조의 문제를 파악하는 데 도움이 보인다.

    나는 시간이 잘 소비되는 저장 - 프로 시저를 기반으로 데이터 액세스 레이어를 개발하기 위해 시간을내어 같은 데이터베이스와 분산 응용 프로그램 (웹 및 컴파일)과 느낌을 모두 않습니다. 개인적으로, 나는 데이터 모델링을하고 초기 개발 과정에서 필요한 발동을 식별하는 것을 선호 ... 디자인 / 인터페이스 로직 / 구조의 문제를 파악하는 데 도움이 보인다.

    내가 인라인 데이터베이스 프로그래밍의 큰 팬이 아니에요 (SQL 코드가 손 또는 기계인지 생성). 나는 데이터베이스가 하나의 응용 프로그램의 기초가 있다고 생각하고 손으로 코드 저장 발동에 시간을 복용하는 것이 가치가있다.

    그건 내가 OODBMS 개념에 관심 내가 프로덕션 환경에서 일부 작업 할거야 언젠가 희망하고 말했다.

  13. ==============================

    13.당신이 확장으로 데이터베이스를 수행 할 경우, 데이터베이스 관계형 모델의 모범 사례에 따라 설계 및 표준화되어야한다.

    당신이 확장으로 데이터베이스를 수행 할 경우, 데이터베이스 관계형 모델의 모범 사례에 따라 설계 및 표준화되어야한다.

    당신이 개체 모델과 ORM은 데이터 모델을 지시 할 경우, 당신은 단지 정규화 및 / 또는 개체 모델에서 유물을 포함하지 않는 빈약 한 데이터 모델로 끝날 것입니다.

    = 1 개 클래스 1 표는 나쁜 생각입니다.

    결코 당신과 함께 시작하려면, 지금까지, 다 대다 또는 다 대일 링크 테이블을 나타내는 클래스가 있습니다. 개체 모델에서 자식 컬렉션에 이러한 대응 - 링크 자체가없는 개체입니다.

    당신이 테이블과 같은 데이터베이스를 치료하면 단순히 행에 개체를 개최 (하나 개의 공통 접근법) 및 응용 프로그램을 테이블에 직접 액세스 권한을 부여, 데이터베이스를 보호하는 데 사용할 수있는 데이터베이스 서비스의 인터페이스 레이어를 정의의 모든 혜택을주고있다 그 경계.

    ,으로 ORMs는 자신의 자리를 가지고 있지만, 당신은 단순히 개체 모델에서 설계대로 개체를 유지하기 위해 그들을 사용하는 경우, 데이터베이스는 관계형 데이터베이스되지 않습니다, ETL,보고의 목적을 위해 하나로서 이용 될 수 없습니다 리팩토링 등

  14. ==============================

    14.나는이 일 뒤에 논리는 프레임 워크 층에 SQL 문을 구축하고 실행의 오버 헤드가 시스템의 다른 부분 (예를 들어, HTTP 요청 왕복이 더 크기 순서이다)의 오버 헤드에 비해 미미한 것으로 생각합니다.

    나는이 일 뒤에 논리는 프레임 워크 층에 SQL 문을 구축하고 실행의 오버 헤드가 시스템의 다른 부분 (예를 들어, HTTP 요청 왕복이 더 크기 순서이다)의 오버 헤드에 비해 미미한 것으로 생각합니다.

    장점 - 빠른 개발이 아니라 등, 탈출 문자열 것보다 언어에 맞게 쿼리는 종종 단점보다 큽니다. 성능이 문제가되는 경우에, 당신은 나중에 최적화 할 수 있습니다.

    나는 요인이다 "SQL을 알 필요 없다"고 생각하지 않습니다. 모든 괜찮은 개발자는 개발에 어떤 시점에서 SQL을 알아야합니다. 데이터베이스 추상화 계층의 개념은 데이터베이스 쿼리에 대한 상용구 코드를 생성하는 노력을 제거하는 것입니다.

    실제로 자바에서 우리의 시스템에, 나는 수업을 주석하고 전체 CRUD API를 생성, 당신은 시간이 지남에 집어 모든 기발한 일을 처리 걸렸 코드 생성기 유틸리티를 만들었습니다. 모델을 생성하고 DAO를 작성을 통해 강타보다는 그것을 주석을 훨씬 쉽게. 이러한 도구를 확장하고 당신은 LINQ 또는 최대 절전 모드 또는 수많은 다른 ORM의 DB 솔루션을 끝낸다.

  15. ==============================

    15.일반적으로 ORMs에 대한 질문 여기에 또 다른 질문이 있었다. 임피던스 부정합이 모두 같은 큰 거래로인지 여부를 좀 더 논의가를 확인하십시오.

    일반적으로 ORMs에 대한 질문 여기에 또 다른 질문이 있었다. 임피던스 부정합이 모두 같은 큰 거래로인지 여부를 좀 더 논의가를 확인하십시오.

  16. ==============================

    16.나는 그들이 필요로하는 진정한 해결책은 더 SQL 리터럴 같은 생각. 코드에서 XML의 권리를 작성하고 그것을 확인하고 DTD에 맞는 것 있는지 확인할 수 VB.Net 9.0 지원의 XML 리터럴. 유사 좋은 기능을 사용하면 닷넷 코드에서 인라인 SQL 코드를 작성하고,이 IDE에 의해 검증 한 수 SQL 리터럴 될 것이다. 이 데이터베이스에 대해 정보를 확인에 플러그인 아키텍처의 일종해야하지만 쉽게 인기있는 데이터베이스 엔진에 기록 될 수 있습니다. 이것은 내가 하위 최적의 솔루션에 의존하지 않고, 그들이 해결하려고했던 문제에 대한 진정한 해결책이라고 생각 무엇을 제공 할 것이다.

    나는 그들이 필요로하는 진정한 해결책은 더 SQL 리터럴 같은 생각. 코드에서 XML의 권리를 작성하고 그것을 확인하고 DTD에 맞는 것 있는지 확인할 수 VB.Net 9.0 지원의 XML 리터럴. 유사 좋은 기능을 사용하면 닷넷 코드에서 인라인 SQL 코드를 작성하고,이 IDE에 의해 검증 한 수 SQL 리터럴 될 것이다. 이 데이터베이스에 대해 정보를 확인에 플러그인 아키텍처의 일종해야하지만 쉽게 인기있는 데이터베이스 엔진에 기록 될 수 있습니다. 이것은 내가 하위 최적의 솔루션에 의존하지 않고, 그들이 해결하려고했던 문제에 대한 진정한 해결책이라고 생각 무엇을 제공 할 것이다.

  17. ==============================

    17.Codemonkey는 아주 좋은 포인트를 만들어 : 저장 프로 시저가 더 복잡한 ORM 모델의 약속의 일부를 충족 추상화의 수준을 제공합니다. 이 첫눈에 직관적으로하지 않습니다하지만 난 내 자신의 코드에서 예를 들어 오른쪽으로 생각할 수 있습니다. 나는 "체크인"터치 거의 십여 테이블 것으로 SPROC가 (에 속하는이 ID는 무엇입니까? 그들이 어떤 메시지가 있습니까? 회원이 할 수 있습니까? 그들이이 체크인? 등 포인트를받을 수 있나요).

    Codemonkey는 아주 좋은 포인트를 만들어 : 저장 프로 시저가 더 복잡한 ORM 모델의 약속의 일부를 충족 추상화의 수준을 제공합니다. 이 첫눈에 직관적으로하지 않습니다하지만 난 내 자신의 코드에서 예를 들어 오른쪽으로 생각할 수 있습니다. 나는 "체크인"터치 거의 십여 테이블 것으로 SPROC가 (에 속하는이 ID는 무엇입니까? 그들이 어떤 메시지가 있습니까? 회원이 할 수 있습니까? 그들이이 체크인? 등 포인트를받을 수 있나요).

    C #에서이 모델링 -에 상관없이하는 방법 정교한 데이터 모델 - 그것은 데이터를 확인하고 다양한 테이블을 업데이트하는 "와이어를 통해"많은 여행을 필요로하는 것처럼 좋은 아이디어를 결코 것입니다. 당신이 Linq에 또는 다른 ORMS의 sprocs가를 처리 할 수있는 것은 사실이지만, 모든 I의 필요 나 표준 C # 매개 변수를 사용하여 SPROC를 호출 할 수있는 래퍼 클래스입니다. 사실,이 내가 그런 래퍼를 만드는 T-SQL에서 코드 생성기를 쓴 나를 위해 그런 급선무였다.

  18. ==============================

    18.그럴 현재 솔루션의 좋아한다 -하지만 난 적은 선택을 통해 더 많은 선택을 선호 ;-)

    그럴 현재 솔루션의 좋아한다 -하지만 난 적은 선택을 통해 더 많은 선택을 선호 ;-)

    (제품이 어떤 극악 무도 한 버그와 끔찍한 기술 지원을했다 unfortunatley) 내가 바로 그것을 얻기에 가장 가까운였습니다 오래 전에 프로젝트에 OODBMS를 사용 - 객체 지속성 (프리 프로세서 코드 생성기를 통해) 내부적으로 처리, 크게 눈에 보이지 않는이었다 제어 아주 간단한 업데이트를 통해, 삭제 및 방법과 간단한 컨테이너를 찾습니다.

    나는 이것을보고 싶어요 (그리고 아마도 일부 개체 개체 모델은 이미 잘이 작업을 수행) 기본 다중 객체 질의 언어로 OCL (객체 제약 언어)로, 다시

  19. ==============================

    19.나는 ORM 도구의 폭발은 주로 다루고, SQL을 작성하는 성가심에서 유래 동의 어떤 DB 드라이버는, 및 변환 데이터 유형 (코드 재사용에 대한 어떤 대, SQL 서버 대 오라클) 내부적으로 DB를 사이에 추상화, 사용에 있어야 .

    나는 ORM 도구의 폭발은 주로 다루고, SQL을 작성하는 성가심에서 유래 동의 어떤 DB 드라이버는, 및 변환 데이터 유형 (코드 재사용에 대한 어떤 대, SQL 서버 대 오라클) 내부적으로 DB를 사이에 추상화, 사용에 있어야 .

    이상적인 솔루션? 확실히하지! 그러나, 나는이 더 나은 데이터 저장소를 사용하여 응용 프로그램을 통합하는 과정에서 반복 생각합니다. 결국, 대부분의 경우, 액세 응용 프로그램이없는 DB는 거의 쓸모가 어떤 언어로 작성하는 데. (당신은 정말 지금 바로 오라클을 설치하고 직접 SQLPLUS에서 일하는 모든 직원을 기대?)

    따라서, 나는 데이터 저장소 및 응용 프로그램이 단지 방식으로 함께 이동하는 생각 할 수있는 더 easilly 상호 작용 데이터 저장소와 응용 프로그램 개발자.

    .NET 특히, 나는 차라리 대신의 LINQ 볼 수있을 것입니다 기초 데이터 저장소에 기본 데이터 소스에 대한 클래스 정의를지도하고, 모든 배관 단지 작업을하는 방식으로 만들었습니다.

    즉 그냥 "Employee.Name = 'rally25rs는';"말할 수 와 객체의 변경 것이다 재산, 그리고 데이터로 유지 것이라는 점을 아래 자체를 저장합니다. 완전히 대신 SQL Linq에 같은 1/2 길을가는 그냥 도랑 SQL 이제 않습니다.

    물론, 그런 솔루션은 성능, 트랜잭션 처리 등의 문제를 불러옵니다

    어쩌면 진솔하고 재편성 할 언어와 관계형 데이터베이스의 필요성을 프로그램의 전체 개념? 핵심, 그들은 완전히 별개의 일관성없는 기관이다. 어쩌면 그것의 시간은 단지 "관계형 SQL 인식 데이터베이스를"도랑 다음 일은, 한 줄의 코드를 실행 휘잉 데이터베이스에서 작동 직접 것을 빌드합니다.

  20. ==============================

    20.LINQ 아무 문제 놈의,하지만 그것을 사용하는 사람들과 "무대 뒤에서"무슨 무시

    LINQ 아무 문제 놈의,하지만 그것을 사용하는 사람들과 "무대 뒤에서"무슨 무시

    난 여전히 SQL 내 손을 더럽를 얻을 것을 선호합니다. 적어도 무슨 일이 일어나고 정확히 알고 거 야.

  21. ==============================

    21.ORM 년대 컴퓨터 과학의 "베트남"을 것을 ... - 테드 Neward 저이 주제에 대한 자신의 포획에 좋은 에세이를 썼다

    ORM 년대 컴퓨터 과학의 "베트남"을 것을 ... - 테드 Neward 저이 주제에 대한 자신의 포획에 좋은 에세이를 썼다

    http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx

  22. ==============================

    22.대부분의 사람들은 필수적인 점을 놓친 : SQL보다 LINQ에서 쿼리 할 때 대부분의 경우에, 당신은 훨씬 더 생산적이다. 나는이 왜 그런지에 대한 기사를 작성했습니다.

    대부분의 사람들은 필수적인 점을 놓친 : SQL보다 LINQ에서 쿼리 할 때 대부분의 경우에, 당신은 훨씬 더 생산적이다. 나는이 왜 그런지에 대한 기사를 작성했습니다.

    나는 LINQPad 도전을 설정할 때, 나는 농담되지 않은 : 대부분의 질의가 SQL에서보다 더 빠르고 안정적으로 LINQ에서 쓸 수 있기 때문에 거의 모든 내 임시 쿼리 LINQ에서의 않습니다. 또한 설계 및 SQL에 LINQ를 사용하여 대형 비즈니스 애플리케이션에 근무하고 생산성에 큰 이득을 보았다. 드라이브가 바로이 사이트 SQL에 LINQ는 생산적이고 실용적인 기술 - 이것은 "아키텍처 우주 비행사"물건이 아니다.

    LINQ의 가장 큰 장애물은 제대로 배우고 실패합니다. 나는이를 백업하는 SQL 쿼리의 끔찍한 음역 있습니다 많은 LINQ 쿼리를 보았다. 또는 악화 - - SQL보다 당신이 SQL의 지식을 사용하여 LINQ 쿼리를 작성하는 경우, 최종 결과는 동일 할 수 있습니다.

  23. ==============================

    23.난 그냥이 질문을 발견했다. 나는 그것이 거의 지금에 의해 연주 추측하지만, 어쨌든 내 두 센트에 던질거야 ...

    난 그냥이 질문을 발견했다. 나는 그것이 거의 지금에 의해 연주 추측하지만, 어쨌든 내 두 센트에 던질거야 ...

    난 단지 명백하지 않은 것들에 대한 코드를 작성합니다.

    CRUD 코드는 분명하다. 나는 그것을 쓰고 싶지 않아. 따라서으로 ORMs 좋은 생각입니다.

    이은으로 ORMs이 문제가 발생하지 않는다는 의미는 아니다,하지만 문제는, 실행을 의도하지 않습니다. 으로 ORMs이 성숙, 문제는 감소되며, 간단한 시나리오에 이미 사용할 수있는 생산성 향상은 결국뿐만 아니라 복잡한 시나리오로 확장됩니다.

    LINQ는 것도 좋은 생각이다. 다른 사람들은 장점을 언급했지만, 내가 할 일은 내가 미리 열 수를 모르는 LINQ에서 피벗을하려고 처음 생각이다. 아니면 실현 처음 나는 새로운 DataView를에게 내가 정렬하거나 필터 뭔가 싶어 모든 시간을 만들 필요가 없습니다 않았다. LINQ의 힘을 실어 나를 오히려 파악하는 것보다 내가 C #, 데이터에 대해 수행 할 모든 작업을 수행하는 방법에 분할 SQL 및 C # 사이의 일까지.

    그래서, 그래,으로 ORMs, LINQ 및 기타 새로운 기술은 최적의 솔루션이다, 그러나이 점을 놓치지 마세요, 그들은 영원히 최적되지 않습니다.

  24. ==============================

    24.나는 @SquareCog에 대한 응답 여기에 답장으로 이것을 쓰고 싶다, 그러나 나는 왼쪽 -1836 문자를 가지고 내게 말했다. 그래서. 나는이 잘못된 일을 한 경우 사과, 그래서 여기 멍청한 놈.

    나는 @SquareCog에 대한 응답 여기에 답장으로 이것을 쓰고 싶다, 그러나 나는 왼쪽 -1836 문자를 가지고 내게 말했다. 그래서. 나는이 잘못된 일을 한 경우 사과, 그래서 여기 멍청한 놈.

    레저의 18 세기 신사에서 연구 과학에 사용. 그 때 과학에서 전체를 합리적으로 지적인 사람이 모든 것을 이해하지 수 있도록 많은 대상이 아니었다. 하는 나는 하나의 배운 사람은 시간의 과학적 사고의 전체를 이해할 수있는 것을 의미한다.

    시간이 발견 된 과학의 새로운 분야의 수백에 의해 간 및 각각의 하나는 요즘 아주 소수의 사람들도 과학의 하나의 완전한 필드의 전체를 이해할 수있는 지점으로 연구한다.

    그래서 프로그래밍입니다.

    요즘 프로그래밍 언어 필드는 충분한 빠른 충분히만큼 합리적으로 자신의 전문 언어 (들)의 전체를 알고 개발자의 예상 할 수 있음을 성장하고있다. 숙련 된 코더도 너무 데이터베이스 설계, 네이티브 SQL의 뉘앙스와 어떻게 다른 데이터베이스에서 작동하며 해당 데이터베이스의 관리를 포함하여, 너무 데이터베이스 필드의 전체를 이해하는 것이 예상되는 경우, 가능한 많은 비트를 요구하고있다.

    여기 응답자 중 일부는 'SQL 문 소수'를 알고, 큰 확대됨에 엔터프라이즈 급 데이터베이스 개발의 복잡성의 일부에 걸쳐 왜곡 생각 가장 확실하게 그것을 잘라하지 않습니다. 어느 가장 큰 소프트웨어 하우스 데이터베이스 개발자의 전담 팀이있는 이유도 바로이 때문입니다. 스트로브 스트 룹은 말하기를, '분할 및 정복'은 효율적으로 개발 및 대규모 소프트웨어 프로젝트 관리에 내재 된 복잡성을 처리 할 수있는 유일한 방법입니다.

    그들이 게으른하거나 만들기 때문에 그들이 '구역질'을 느끼기 때문에 개발자는 SQL 작업을 싫어하지 않습니다. 그들이 똑똑 때문에 그들은 SQL 작업을 싫어한다. 그들은 더 나은 SQL 전문 사람 만이 최고 품질의 데이터베이스 기능을 제공 할 것이라는 점을 누구보다 알고 그들을 개발자의 모든 거래의 잭 '되는 위치에 넣어하기위한 최적의 개발 전략이다.

  25. from https://stackoverflow.com/questions/458802/doesnt-linq-to-sql-miss-the-point-arent-orm-mappers-subsonic-etc-sub-opti by cc-by-sa and MIT license