[sql-server-2005] SQL Server 스키마는 무엇입니까?

SQL 데이터베이스, 특히 SQL Server를 사용하는 초보자는 아닙니다. 그러나 나는 주로 SQL 2000 전문가였으며 2005 년에는 항상 스키마에 혼란스러워했습니다. 예, 스키마의 기본 정의를 알고 있지만 일반적인 SQL Server 배포에서 실제로 사용되는 것은 무엇입니까?

나는 항상 기본 스키마를 사용했습니다. 왜 특수 스키마를 만들고 싶습니까? 내장 스키마를 할당해야하는 이유는 무엇입니까?

편집 : 분명히하기 위해 스키마의 이점을 찾고 있다고 생각합니다. 보안 체계로만 사용하려는 경우 데이터베이스 역할이 이미 해당 역할을 채우는 것처럼 보입니다. 그리고 네임 스페이스 지정자로 사용하면 소유권 (dbo 대 사용자 등)으로 수행 할 수있는 것으로 보입니다.

내가 얻는 것은, 소유자와 역할로 할 수 없었던 스키마는 무엇입니까? 그들의 특정 혜택은 무엇입니까?



답변

스키마는 테이블, 프로 시저, 뷰를 논리적으로 그룹화합니다. employee스키마 등 의 모든 직원 관련 개체

또한 하나의 스키마에만 권한을 부여 할 수 있으므로 사용자는 액세스 권한이있는 스키마 만 볼 수 있습니다.


답변

C # 코드의 네임 스페이스와 같습니다.


답변

또한 플러그인 데이터에 대해 일종의 명명 충돌 방지 기능을 제공 할 수 있습니다. 예를 들어 SQL Server 2008의 새로운 변경 데이터 캡처 기능은 사용하는 테이블을 별도의 cdc 스키마에 넣습니다. 이런 식으로, 그들은 CDC 테이블과 데이터베이스에서 사용되는 실제 테이블 사이의 이름 충돌에 대해 걱정할 필요가 없으며, 그 문제 때문에 의도적으로 실제 테이블의 이름을 숨길 수 있습니다.


답변

나는 그것이 오래된 스레드라는 것을 알고 있지만 스키마를 직접 살펴보고 다음이 스키마 사용에 대한 또 다른 좋은 후보가 될 수 있다고 생각합니다.

데이터웨어 하우스에서는 다른 소스에서 가져온 데이터를 사용하여 각 소스마다 다른 스키마를 사용한 다음 스키마를 기반으로 액세스를 제어 할 수 있습니다. 또한 다른 포스터가 위에서 대답 한 것처럼 다양한 소스 간의 이름 충돌이 발생하지 않도록합니다.


답변

스키마를 개별적으로 유지하면 지정된 스키마를 새 DB 서버에 배포하여 애플리케이션을 확장 할 수 있습니다. (이것은 고유 한 기능을 갖기에 충분히 큰 응용 프로그램이나 시스템이 있다고 가정합니다).

예를 들어, 로깅을 수행하는 시스템을 고려하십시오. 모든 로깅 테이블과 SP는 [logging] 스키마에 있습니다. 로깅은 시스템의 다른 기능이 로깅 스키마의 오브젝트와 겹치거나 (결합되는) 경우가 거의 없기 때문에 좋은 예입니다.

이 기술을 사용하기위한 힌트-응용 프로그램 / 시스템의 각 스키마마다 다른 연결 문자열이 있습니다. 그런 다음 스키마 요소를 새 서버에 배치하고 확장해야 할 때 연결 문자열을 변경하십시오.


답변

나는 이것에 대해 브렌트에 동의하는 경향이 있습니다 … 여기 에이 토론을 참조하십시오. http://www.brentozar.com/archive/2010/05/why-use-schemas/

간단히 말해서 … 스키마는 매우 구체적인 사용 사례를 제외하고는 크게 유용하지 않습니다. 일이 지저분해진다. 도움이 될 경우 사용하지 마십시오. 그리고 K (eep) I (t) S (imple) S (tupid) 규칙을 따르십시오.


답변

스키마에 연결된 사용자의 별칭을 지정해도 이점이 없습니다. 여기에 이유가 있습니다 ….

대부분의 사람들은 처음에 역할을 통해 사용자 계정을 데이터베이스에 연결합니다. 사용자를 sysadmin 또는 데이터베이스 역할 db_owner에 어떤 형태로든 할당하면 해당 계정은 “dbo”사용자 계정의 별칭이거나 전체 데이터베이스에 대한 권한. 이러한 상황이 발생하면 기본 스키마 (사용자 계정과 이름이 같은) 이외의 구성표에 자신을 할당하는 방법에 관계없이 해당 dbo 권한은 사용자 및 스키마에서 생성 한 개체에 할당됩니다. 그것은 무의미한 ….. 그리고 단지 네임 스페이스이며 그 객체에 대한 진정한 소유권을 혼란스럽게합니다. 당신이 저에게 물어 보면 디자인이 좋지 않습니다.

그들이해야 할 일은 “그룹”을 만들고 스키마와 역할을 버리고 원하는 그룹 조합을 원하는대로 그룹화 할 수 있도록 허용 한 다음 각 계층에서 권한이 상속, 거부 또는 사용자 지정으로 덮어 쓰기되었는지 시스템에 알립니다. 그들. 이것은 훨씬 더 직관적이었고 DBA가 실제 소유자가 해당 객체에있는 사람을 더 잘 제어 할 수있게했습니다. 현재 대부분의 경우 dbo 기본 SQL Server 사용자에게는 사용자가 아닌 이러한 권한이 있습니다.