0

我使用django rest框架和帶有postgresql數據庫的django-tenant-schemas軟件包創建SaaS應用程序。數據庫中的每個用戶都具有相同的基本模式。用戶可以擴展基本模式以允許自定義表格/列。如何編寫單個前端應用程序以適應共享數據庫/獨立模式數據結構?

所以,如果我想寫一個能夠考慮自定義表的單個前端,我該怎麼做? (我用的角2有沒有什麼幫助)

爲了符合要求,可以回答並不只是討論問題,這樣的政策,這裏是我的問題:

1)它甚至有可能到爲這種類型的數據結構編寫單個前端應用程序?

2)對於我正在嘗試做的事情,有沒有一個詞,概念或想法?我希望能夠更多地研究這一點,但我很難知道什麼甚至谷歌。

如果我的問題看起來很模糊,那是因爲我仍然在想如何去問它。如果您需要澄清,請不要猶豫,在評論中提問。我真的只是尋找#2的答案,所以我可以繼續我的研究。

回答

0

這是可能的,但困難(並且,沒有,我沒有意識到它是真的一個詞)。除了其原有功能外,您的應用程序還需要承擔數據庫管理應用程序的某些職責,然後用戶界面需要能夠適應可變模式。爲了發現用戶對他們的模式做什麼,並且自己管理訪問和權限以確保用戶可以改變他們的改變而不是核心模式,你將會做很多查詢系統表。

您確定您需要關係數據庫嗎?如果不知道你想要做什麼,很難提出任何建議,但如果你的模型不太複雜,像MongoDB這樣的「無模式」文檔數據庫可能更合適。如果您確實擁有一個高度關係的結構,只需要支持自定義,就可以考慮利用Postgres的JSON/JSONB數據類型。

0

實際上,這種設置純粹是一個API問題,而不是前端問題。記住你的前端並不關心你的數據庫是如何設置的 - 它只關心它可以調用的API。您的API必須完成具有公共端點的工作,以便每個人都可以調用,然後根據當前用戶訪問正確的數據庫。這被稱爲多租戶應用程序 - 實際上,Rails有一個提供此功能的gem (the apartment gem)。我知道你使用的是Django,但是如果Rails有一個'插件'來協助這個設置,如果Django有類似的東西,我不會感到驚訝。

請注意,由於不同的用戶可能有不同的表格,因此您的前端不是完全靜態的 - 它可能實際上必須包含API請求,以返回用戶自定義信息,以幫助其根據不同用戶的需求配置其用戶界面。這不是一個棘手的問題 - 只是要包含在前端應用程序設計中。

0

你應該重新考慮你的數據庫設計。你的方式將導致大量的維護問題。

這是微軟發佈在data architecture for SaaS applications上的一份很棒的白皮書。這個是article on Salesforce architecture

對於您的特定情況,假設您有用戶存儲聯繫人的聯繫人表。你可以有一個共同的基礎表,所有租戶/賬戶都有共同的字段。然後有一個contact_custom_fields表來存儲自定義字段定義。此表可能具有fieldId,accountId,fieldName,fieldType ...

最後有一個contact_custom_field_values表來存儲自定義字段的實際字段值。此表可以具有accountId,contactId,fieldId,fieldValue。

相關問題