2009-04-29 3 views
0

바보라고 불릴 위험에, 나는 당신의 생각이 MS SQL DB 내에서 관계 제약 조건을 유지하는 것에 대해 궁금해합니다.DB 마이그레이션 : 관계 제약 조건을 유지 하시겠습니까?

시스템을 ASP에서 .NET 환경으로 마이그레이션하고 있습니다. 여기에는 비즈니스 오브젝트 및 기타 계층화 코딩 기술이 사용되며, 이는 사용자/API에서 데이터베이스를 추상화하는 데 사용됩니다. 새로운 응용 프로그램에는 Entity Framework DAL 위에 명확한 API가 있습니다.

이전 데이터베이스의 응용 프로그램 DB가 크고 일부 테이블의 목적이 파일 등의 형태로 이진 데이터가 포함되어 시작되도록 변경 될 예정입니다.이 파일을 별도의 DB로 분할하려고합니다. 디스크 공간이 중요한 클라이언트 사이트에서 관리를 쉽게 수행 할 수 있습니다.

테이블 간의 관계 제약 조건에는 어떤 가치가 있습니까?

가정 :

  • 코드 관계가 중요하다
  • 테스트는 실행이 DB에
  • 접근이 API는, 타사에 의해 다른 액세스가 지원되지 않는 경유 트랜잭션에서 수행됩니다. 제약 조건을 유지하기

이유 :

  • 조인 데이터 구조가 더 빨리 시행합니다?
  • 쿼리 계획 지원? 새로운 .NET 버전에 제약을 제거하는

이유 :

  • 하나는 API/BIZ 로직은 부모/자식 같은 관계를 관리한다고 가정 할 수있다.
  • 내가 SQL 중에 추가 검사를 수행해야한다는 믿음에서 수정 건가요 (시스템이 플러그 - 인 아키텍처, 대부분의 테이블이 단독으로 작동 할 수 있습니다 사용하여 내장) 다른 카탈로그로 DB의 섹션을 분봉 할 수있는 기회를 감소 제약 조건에 대한 INSERT : DB 위의 API가이를 관리 할 때 불필요한 예외가 될 수 있습니까?

은 어차피 경우 지역 사회에 내 질문을 던져 나는 바보 같은 뭔가를 놓친 또는이

+0

그런데 바보 같은 질문은 없으며, 바보 같은 대답뿐입니다. 그러니 바보라고 부르는 것에 대해 걱정하지 마십시오. 그렇게하지 않아도됩니다 (또는 적어도 그렇게해서는 안됩니다!). 모든 정직에서; 나도이 제약 - 질문을 스스로에게 물었다. – pyrocumulus

+0

사실, 당신 말이 맞습니다. 하나는 보디의 분노를 두려워합니다! 링크를 사용해 주셔서 감사합니다. 검색에 참여하지 않았습니다. 내 질문에 타이핑 할 때 우수한 AJAXy 검색까지도 포함되었습니다. –

답변

1

내가 제약 "자동 색인"라는 주장을 지원하지 않습니다

또한이 질문을 참조하십시오. 고유 키 및 기본 키만 수행합니다. 외래 키는 없지만 대부분의 경우 FK 열과 일치하는 "하위"인덱스를 사용하는 것이 좋습니다.그들이

  1. 데이터 무결성을 시행합니다 (I 버그를 갖고, 일을 실패한 BL에 의해 여러 번 물린 것)로 그럼에도 불구하고 나는 여전히 FKeys를 추천 할 것입니다.
  2. 옵티마이 저가 데이터 패턴에 대한 자세한 정보를 제공하면 더 좋고 빠른 실행 계획이 생길 수 있습니다.

하지만 무엇보다도 단일 데이터베이스에 데이터를 보관하려고 생각했지만 여러 파일 그룹에서 데이터를 분리하려고 생각한 적이 있습니까? 복수의 DB에 걸친 외래 키의 번거 로움없이 더 유연한 디스크 공간 관리를 달성 할 수 있습니다.

+0

감사합니다. 나는 내 대답을 조금 수정했다. db 엔진이 FK에 인덱스를 자동으로 추가하지는 않지만, 두 경우 모두 플래너가 계획하는 정보를 사용하기 때문에 효과는 거의 같습니다. – pyrocumulus

+0

파일 그룹에 대한 좋은 아이디어. 나는 그들이 존재한다는 것을 알았지 만 나는 DBA가 아니기 때문에 그들을 간과했다. 관계를 유지하고 지금까지 파일 그룹을 사용하는 것이 좋습니다. 감사. –

2

나단을 ... 일

많은 감사,

기다리고 단지 악몽 인 경우 예, 관계형 제약 조건을 유지하는 것이 좋습니다. 확실하게 BLL에서 처리해야하지만 제약 조건은 쿼리 계획자가 쿼리를보다 효율적으로 처리하는 데 사용되므로 성능이 향상됩니다. Are foreign keys really necessary in a database design?

1

그렇습니다. 특별한 이유가없는 한 테이블에 외래 키 제약 조건이 있어야합니다. 응용 프로그램이 테스트 되었더라도 데이터베이스에 쓸 수있는 유일한 것은 아닙니다. FK는 모든 출처의 데이터에 대해 참조 무결성을 시행합니다.

외래 키는 데이터베이스의 관계에 대한 일종의 비공식 문서 도구 역할도합니다. FK가 데이터베이스에있는 경우 Visio (또는 리버스 엔지니어링을 지원하는 다른 도구)를 사용하여 스키마를 공개하고 관계를 확인할 수 있습니다. 성능 이름으로 데이터베이스에 외래 키를 삭제하는 것은 ISV에서 데이터베이스 스키마를 obfusticate하고 더 많은 수익을 창출하는 데 사용되는 일반적인 기술입니다.

성능 관련 특정 문제를 외래 키로 추적 할 수 있으면 해당 키를 삭제해야 할 수 있습니다. 이는 하나 또는 두 개의 특정 대량 테이블에서 소수의 키에서만 발생할 수 있습니다. 또한 트랜잭션 양이 많은 시스템에서는 필요할 수 있습니다. 데이터베이스에 외래 키가 전혀 없다는 핑계는 전혀 없습니다.

관련 문제