2011-09-08 4 views
1

우리는 소규모 사무실에서 하나의 MySQL 인스턴스를 실행합니다. 우리는 모두 db를 지원 저장소로 사용하는 3 가지 응용 프로그램을 보유하고 있습니다. 단일 스키마에는 세 가지 응용 프로그램 모두에 대한 모든 테이블이 있습니다. 모든 응용 프로그램은 공통 테이블 (예 : tbl_users, tbl_facilities 등)을 사용합니다. 나는 예를 들어, 개체를 다른 응용 프로그램에서 그들을 분리 시각적으로 스키마 객체에 대한 응용 프로그램 접두어를 사용하고 : 응용 프로그램에서 테이블을 공유하는 모범 사례

  • doof_tbl_settings
  • foo_vw_recent_orders
  • doff_vw_parts을
  • foo_tbl_orders을

    • foo_tbl_settings

    나는 결코 이것에 만족하지 않았다, 그것은 항상 내가 분리 된 sc 헤 마스; 하나의 논리적 응용 프로그램마다 하나씩 공유 객체 (사용자 테이블 등)에 대한 공유 스키마

    공유 테이블을 공유하는 것은 매우 중요하며 포기하고 싶지 않습니다.

    나는이 주제에 대해 약간의 인터넷 검색을 해왔지만 실제로 이것이 좋은 연습인지 아닌지에 대해서는 설명하지 못했습니다. 저는 여러분 중 일부가 제 상황과 같은 상황에 대한 베스트 프랙티스에 대해 조언 해주기를 바랍니다.

  • +1

    'foo_tbl_settings'은 자연스럽게'foo.tbl_settings'로 변환됩니다 ... –

    +0

    나는 동의하지만, 무엇을 제안합니까? 별도의 스키마를 사용합니까? –

    +0

    그 접두어의 사용법은 깨끗한 분리가 존재 함을 시사하지만 세부 사항을 자세히 설명하고 싶지 않기 때문에 답변을 게시하지 않았습니다 :) –

    답변

    0

    하나의 DB를 공유해야하는 강력한 이유가 없으면 응용 프로그램 당 하나의 DB 만 가질 수는 없습니까?

    당신은 테이블을 '공유'한다고 말했지만 다른 이름으로 테이블 이름을 설명 했으므로 실제로 데이터를 공유하지 않는 동일한 구조를 공유하고 있습니다. 내가 잘못 해석하지 않는 한 응용 프로그램 당 하나의 DB를 사용하는 것이 좋습니다. 그러면 서버의 다른 응용 프로그램과 연결을 끊을 필요없이 DB와 ​​응용 프로그램을 새 위치로 이동할 수 있습니다.

    +0

    명확하지 않을 수 있습니다. 응용 프로그램이 일부 공유 테이블에있는 동일한 데이터를 공유합니다. 그래서 우리는 비슷한 테이블을 가지고 있습니다. 실제로 데이터를 공유하는 테이블을 가지고 있습니다. (예 : 사용자 계정 데이터) –

    2

    실제로 테이블을 공유하는 것은 좋지 않습니다.

    하지만 정말로 필요한 경우 모든 응용 프로그램마다 다른 스키마를 만들고 예를 들어 공통 스키마 schema_schema를 만들 수 있습니다.

    공통 스키마에는 공유 테이블이있을 수 있습니다.

    그런 다음 모든 응용 프로그램 스키마에서 공유 스키마에서 연결하려는 모든 테이블에 대해 mysql views을 만들 수 있습니다. 이 스키마에서 필요한 이름으로 모든 뷰의 이름을 지정할 수 있습니다. 이제 테이블을 다른 이름으로 설명 할 수 있습니다.

    +1

    "공유 테이블은별로 좋은 행동이 아닙니다"- 정보를 보내 주셔서 감사합니다. ? 나는 동의하지 않지만 그것이 나쁜 생각 인 주된 이유가 무엇인지 알고 싶습니다. –

    +1

    예를 들어, 웹 개발자가 레일즈에서 루비를 사용하는 경우 일부 데이터를 정리하거나 비즈니스 로직을 만들기 위해 레코드를 삭제 한 후 서버에서 콜백이 실행될 수 있습니다. 레코드가 다른 응용 프로그램에서 삭제 된 경우 다른 응용 프로그램은 루비 코드에서 처리되기 때문에 통보를받지 않습니다. \ –

    +0

    귀하의 예제를 이해하지만, 우리가 공유 할 테이블에는 적용되지 않습니다. 사실 몇 가지 테이블을 공유하고 싶습니다. 사실이 시점에서 생각할 수있는 것은 _user, _user_roles 및 _roles 테이블뿐입니다. 클라이언트 응용 프로그램은 이러한 테이블의 레코드를 삭제하지 않으며 트리거 설정이나 계단식 변경을 초래할 수있는 사항이 없습니다. 스키마간에 테이블을 공유하는 것이 나쁜 아이디어 인 다른 이유 (성능, 관리 편의성 등)가 있습니까? –