0

저는 django rest framework과 postgresql 데이터베이스가있는 django-tenant-schemas 패키지를 사용하여 SaaS 애플리케이션을 만들고 있습니다. 데이터베이스의 각 사용자는 동일한 기본 스키마를가집니다. 사용자는 사용자 정의 테이블/열을 허용하도록 기본 스키마를 확장 할 수 있습니다.공유 데이터베이스/별도의 스키마 데이터 구조를 수용하기 위해 단일 프런트 엔드 응용 프로그램을 작성하는 방법은 무엇입니까?

그래서 맞춤형 테이블을 설명 할 수있는 단일 프런트 엔드를 작성하려면 어떻게해야합니까? 대답 그냥 논의 할 수는 없습니다 질문의 SO의 정책을 준수하기 위해

(즉, 도움이된다면 나는이 각 사용하고 있습니다), 여기 내 질문은 :

1)는로도 가능 이 유형의 데이터 구조를위한 단일 프런트 엔드 응용 프로그램을 작성 하시겠습니까?

2) 내가하려는 일에 대한 단어, 개념 또는 아이디어가 있습니까? 나는 이것을 더 많이 연구 할 수 있기를 원하지만 나는 심지어 무엇이 구글인지 알기가 힘들다.

내 질문에 애매한 것처럼 보이는 이유는 여전히 질문하는 방법을 찾으려하기 때문입니다. 설명이 필요하면 주저없이 의견을 물어보십시오. 나는 정말 # 2에 대한 답을 찾고있어 연구를 계속할 수 있습니다.

답변

0

가능하지만 어렵습니다 (실제로 알고있는 단어가 없습니다). 응용 프로그램은 원래 기능인 외에 데이터베이스 관리 응용 프로그램 의 의무를 수행해야하며 사용자 인터페이스는 변경 가능한 스키마에 적응할 수 있어야합니다. 사용자가 자신의 스키마에 대해 수행 한 작업을 파악하고 액세스 및 사용 권한을 직접 관리하여 사용자가 변경 사항을 변경할 수 있지만 핵심 스키마는 변경할 수 없도록하려면 시스템 테이블을 쿼리해야합니다.

확실한 관계형 데이터베이스가 필요합니까? 정확히 무엇을 하려는지 모른 채 제안 할 수는 없지만, 모델이 너무 복잡하지 않으면 MongoDB와 같은 스키마없는 문서 데이터베이스가 더 적합 할 수 있습니다. 상위 사용자 정의를 지원해야하는 관계형 구조가 있다면 Postgres의 JSON/JSONB 데이터 유형을 활용하는 것이 좋습니다.

0

실제로 이런 종류의 설정은 전적으로 API 관련 문제이며 프런트 엔드 관련 사항이 아닙니다. 프론트 엔드는 데이터베이스를 설정하는 방법에 대해 신경 쓰지 않고 호출 할 수있는 API에만 관심이 있다는 것을 기억하십시오. API는 모두가 호출 할 수있는 공통 엔드 포인트를 가지고 현재 사용자를 기반으로 올바른 데이터베이스에 액세스하는 작업을 수행해야합니다. 이것은 멀티 테넌트 (multi-tenant) 애플리케이션이라고 불리며 실제로 레일즈는이 기능을 제공하는 보석을 가지고 있습니다. (the apartment gem). 장고를 사용하고 있다는 것을 알고 있지만 레일즈가이 설정을 돕기 위해 '플러그인'을 가지고 있다면 장고가 비슷한 것을 가지고 있다면 놀라지 않을 것입니다.

서로 다른 사용자가 서로 다른 테이블을 가질 수 있으므로 프런트 엔드가 완전히 정적이 아니므로 사실상 다른 사용자의 요구에 따라 UI를 구성하는 데 도움이되는 사용자 지정 정보를 반환하는 API 요청을 포함해야 할 수도 있습니다 . 이 부분은 까다로운 부분이 아니며 프론트 엔드 애플리케이션 디자인에 포함시켜야 할 부분입니다.

0

데이터베이스 디자인을 재고해야합니다. 당신이 가고있는 길은 많은 유지 보수 문제를 초래할 것입니다.

data architecture for SaaS applications에 Microsoft의 백서가 있습니다.

여기는 article on Salesforce architecture입니다.

구체적인 경우 사용자가 연락처를 저장하는 연락처 테이블이 있다고 가정 해보십시오. 모든 임차인/계정에 공통 필드가있는 공통 기본 테이블을 가질 수 있습니다. 그런 다음 contact_custom_fields 테이블을 사용하여 사용자 정의 필드 정의를 저장하십시오. 이 테이블에는 fieldId, accountId, fieldName, fieldType이있을 수 있습니다 ...

마지막으로 custom_field의 실제 필드 값을 저장하는 contact_custom_field_values ​​테이블이 있습니다. 이 테이블은 accountId, contactId, fieldId, fieldValue를 가질 수 있습니다.