Ich bin gerade dabei, eine Webapp, die Abonnements als Multi-Tenant-App zu verkaufen. Die Technik, die ich verwende, ist Schienen.Multi-Tenancy mit Mandanten teilen Daten
Es wird jedoch nicht nur isoliert Mieter mit der aktuellen App sein.
Jeder Mieter erstellt Produkte und veröffentlicht sie auf ihrer persönlichen Instanz der App. Jeder Mieter hat seine eigene Nutzerbasis.
Die problematische Spezifikation ist, dass ein Mieter sein Produkt mit anderen Mietern teilen kann, damit sie es weiterverkaufen können.
Erläuterung:
Fruitshop verkauft Apfel Orangen und Tomaten.
VegetableShop verkauft Rettich und Pfeffer Bell.Fruitshop teilen Tomaten zu anderen Geschäften.
VegetableShop entschließen sich, Tomaten aus der Liste der freigegebenen Artikel zu holen und sie zu ihrem Inventar hinzuzufügen.
Jetzt ein Kunde, der Gemüsehändler grast, sieht Rettich, Pfefferglocke und Tomaten.
Wie Sie erraten können, ein
select products where tenant_id='vegetableshop_ID'
wird nicht funktionieren.
ich mit irgendeiner Art von tenant_to_product
Tisch zu viele Beziehung dachte eine viele tun, die tenant_id
, product_id
, price_id
und sogar veröffentlichen beginnen-Enddaten haben würde. Und Produkte wären eine "halbvermietete Tabelle", in der die Mieter-ID durch mieter_creator_id ersetzt wird, um zu wissen, wer der ursprüngliche Eigentümer ist.
Für mich scheint es umständlich, Hinzufügen würde es komplexe Abfrage bedeuten, auch für den Laden nur ihre eigenen Produkte zu verkaufen. die verkauften Produkte erhalten würde kompliziert sein:
select tenant_to_products.*
where tenant_to_products.tenant_ID='current tenant'
AND (tenant_to_products.product match publication constraints)
for each tenant_to_product do
# it will trigger a lot of DB call
Display tenant_to_product.product with tenant_to_product.price
Un-Sharing ein Produkts auch einen komplexen Update modifiziert alle tenant_to_products Verweis auf das Original-Produkt bedeuten würde.
Ich bin mir nicht sicher, ob es eine gute Idee wäre, diese Beschränkung so zu implementieren, was schlagen Sie mir vor? Habe ich vor, etwas Dummes zu tun oder ist es eine nicht so schlechte Idee?