2012-08-15 6 views
1

나는 Items, Places, Categories 등의 테이블과 함께 추상 데이터베이스 구조를 사용하는 세 개의 웹 사이트를 가지고 있습니다 ... GetItemsByCategory, GetRelatedItems 등과 같은 저장 프로 시저 ... 실제로 정확하게 사용하고 있습니다. 이 3 개의 다른 웹 사이트에 대한 동일한 데이터베이스 구조.동일한 데이터베이스 구조를 사용하는 여러 웹 사이트

모든 웹 사이트에 대해 동일한 코드를 사용하는 코드 관점에서 (모든 HTML은 특정 foreach 코드입니다) 모든 공통 코드는 모든 웹 사이트에서 사용되는 소수의 프로젝트에 있습니다. 모든 웹 사이트에 있음) 나는 한 곳 (모두 공통적 인 부분)에서 수정하고 자동으로 모든 웹 사이트에서 수정 사항을 얻습니다.

실제로 저는 Asp.net MVC3 및 Sql 서버를 사용하고 있습니다.

매번 내가 funcionality를 확장하고 싶습니다. 새 테이블, 저장 프로 시저 또는 데이터베이스와 관련된 것이 필요합니다. 각 데이터베이스에서 수정해야합니다.

  • 모든 웹 사이트에서 동일한 유연성과 데이터베이스 수정을 수행하는 데 사용할 수있는 방법을 알고 계십니까?

  • 내가 좋은 접근 방식을 사용하고 있다고 생각합니까 아니면 다른 의견을 사용해야한다고 생각하십니까?

답변

1

데이터베이스가 하나의 서버에있는 경우 관리 Studio에서 프로 시저에 대한 스크립트를 생성하고, "개체의 존재를 확인"하는 옵션을 사용해야합니다 수 있습니다 (도구> 옵션> SQL 서버 개체 탐색기> 스크립팅). 이 이런 식으로 뭔가를 얻을 것입니다 (가장 중요한 것은 당신이 동적 SQL을 사용하여 실행할 수있는 무언가로 저장 프로 시저 코드를 생성) :

USE DBName; 
GO 

SET ANSI_NULLS ON; 
GO 

SET QUOTED_IDENTIFIER ON; 
GO 

IF NOT EXISTS (...) 
BEGIN 
    EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE dbo.whatever ... 
    ' 
END 
GO 
이제

이 스크립트를 가지고, 당신은 여러 데이터베이스 작업을 수정할 수 있습니다 - 당신은 @statement = 부분을 스 와이프하고 재사용하면된다. 먼저, 데이터베이스를 @table 변수에 넣고 싶을 때 데이터베이스를 채워야합니다 (또는 원할 경우 영구 테이블에 넣을 수도 있습니다). 그런 다음 각 데이터베이스에서 실행할 명령을 작성할 수 있습니다. http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/a-more-reliable-and-more-flexible-sp-msforeachdb.aspx & http://mssqltips.com/tip.asp?tip=2201

내가 이것에 대한 SQLFarms Combine라는 도구를 사용하는 데 사용하지만,이 도구는 더 이상 존재하지 않는 것, 또는 :

DECLARE @dbs TABLE (name SYSNAME); 

INSERT @dbs(name) SELECT N'db1'; 
INSERT @dbs(name) SELECT N'db2'; 
INSERT @dbs(name) SELECT N'db3'; 

-- now here is where we re-use the create/alter procedure command from above: 

DECLARE @statement NVARCHAR(MAX) = N'CREATE PROCEDURE dbo.whatever ... 
    '; 

-- now let's build some dynamic SQL and run it! 

DECLARE @sql NVARCHAR(MAX); 
SET @sql = N''; 

SELECT @sql = @sql + ' 
    EXEC ' + QUOTENAME(name) + '.dbo.sp_executesql N''' + @statement + ''';' 
    FROM @dbs; 

EXEC sp_executesql @sql; 

양자 택일로, 당신은 내 sp_msforeachdb 교체의 사용자 지정 버전을 만들 수 있습니다 아마 그것은 다른 회사에 의해 위로 삼켜 졌거나/re-branded되었을 것입니다.

0

websiteId라고하는 모든 테이블에 열을 추가 한 경우 하나의 데이터베이스 만있을 수 있습니다. 각 사이트의 web.config에 고유 한 웹 사이트 ID를 저장하고 각 데이터 요청마다 전달하십시오. 분명히 각 사이트의 데이터는 웹 사이트 ID와 함께 저장되므로 웹 사이트별로 데이터를 쿼리 할 수 ​​있습니다.

DB에서 약간의 리팩토링과 데이터베이스 호출을 의미하지만 일단 완료되면 유지 관리 할 데이터베이스가 하나뿐입니다.

물론 데이터베이스가 동일한 서버에 있다고 가정합니다.

관련 문제