PDA

Pogčedajte punu verziju : [brainstrorming] Billing sistem


bluesman
09. 06. 2005., 19:25
Malo da razmrdamo vijuge, a i da krene bar jedan post ovde :)

Dakle, billing sistem.

- Postoje services
- Postoje premium_services (velika je razlika u odnosu na services)
- Postoje users
- Postoje user_services
- Postoje user_premium_services

Jedan korisnik može biti prijavljen na više servisa, kao što i više korisnika može biti prijavljeno na isti servis. Klasična M2M. Isto važi i za premium services.

Neke services su besplatne, neke se naplaćuju odmah (one-time), neke na kraju meseca, neke su recurring i to na periode weekly, bi-weekly, monhtly, quarterly. Pored toga, postoje i support, gde se neke stvari naplaćuju a neke ne. Recimo ne naplaćuje se otvaranje servisa, ali modifikacija postojećih servisa se naplaćuje.

Dakle, kako organizovati bazu podataka?

- Tabela billings u kojoj se nalaze sve payable items: negativne vrednosti su plaćanja user-a, pozivine stavke su dugovanja usera. Nešto kao izvod sa bankovnog računa. Napomena: billing items se ne naplaćuju same po sebi već se kreiraju Invoices (fakture) u kojoj može biti jedna ili više billing items.

Ovde korisnik ili admin može da vidi kompletno stanje, zajedno sa history, kao i trenutni balans sa računa. Može da izabere period po želji, i tu mora biti sve što se tiče naplate korisnika.

- Tabela invoices u kojoj se nalaze računi korisnika koje on plaća. Invoice može biti kreiran samo jednom i plaćen samo jednom. Za svako novo recurring plaćanje se kreira novi invoice.

- Tabela recurring u kojoj su samo pravila kako i kada se kreiraju billing items. Znači, jednom dnevno, cronjob čita iz te tabele da li je nešto dospelo za billing i ako jeste kreira billing item

Pošto se neke invoices kreiraju odmah, odnosno korisnik mora prvo da plati da bi mogao da koristi sistem, pa se tek onda aktivira servis, a neke korisnik može da plati na kraju meseca, ideja je da postoje i flag-ovi koji određuju invoice rules.

Ko ima malo vremena? Neke dodatne ideje?
Napomena: pitanje je samo normalizacija baze podatak, ne sam kod ili bilo šta slično.

Goran Aničić
10. 06. 2005., 00:41
E sad, pošto pretpostavljam da entiteti services i premium_services poseduju neke zajedničke atribute, bez obzira koliko su različiti, u nekoj daljoj normalizaciji mogli bi da se postave kao IS_A hijerarhija.

Superklasa u ovom slučaju services, sadrži klasifikaciono obeležje, dok bi premium_services bili više povezanih podklasa sa specifičnim atributima nesvojstvenim superklasi.

Primarni ključ bi se prostirao sa superklase na podklasu. Ovo je u redu ako je pretpostavka o atributima ispravna.

bluesman
10. 06. 2005., 01:38
Možda bi i moglo, ali teško da može biti nekog nasleđivanja, osim service_id kao primary key i service_name, sve ostalo je totalno drugačije.