» »

Predlog - tabela - plačilni sistemi

Predlog - tabela - plačilni sistemi

programercek ::

Pozdravljeni,

Zanima me kako mi predlagate postaviti tabelo glede na različne načine plačilnih sistemov.
Hočem vse shranjevati v eno samo tabelo.

Vendar se mi poraja kar nekaj vprašanj.

Imam plačilne sisteme:
- kreditne kartice
- moneybookers
- neteller
- paypal

Namesto, da bi ustvaru vsako tabelo posebej za plačilni sistem, je smiselno vse shranjevat v eno samo tabelo.

Uporabljam MSSQL in delam v VS.

Trenutno imam tabelo tbl_PaymentDetails
in uporabljam samo dva stolpca: AttributeName in Value.

Namesto, da bi ustvaril nov stolpec CreditCardNumber, itd,
vpisujem te podatke v AttributeName, v Value pa shranim vrednosti.

Ne vem kaj mi predlagate, ali, da ustvarim več stolpcev:
CardID CardType CardNumber ExpiryMonth ExpiryYear NameOnCard EmailAddress

Ali je smiselno, da imam samo AttributeName in Value.

Če ustvarim več stolpcev, kot sem navedel zgoraj, je problem, kaj shranim pod CardID, CardType in vse ostale stolpce, razen pod EmailAddress shranim podatek. Vsi ostali stolpci so prazni.

Prosim za pomoč.

Spura ::

Odvisno od tega katere podatke hoces. Iz povedanega ni nic jasno zakaj rabis te podatke, kaj bos z njimi pocel. Ali bi naprimer rad samo shranjeval koliko ima oseba na katerem racunu, ali bi rad sledil vsem transakcijam itd itd... zelo pomanjkljiv opis problema.

Spura ::

Me pa tudi zanima kaj je potem primarni kljuc pri tej shemi AttributeName in Value. Oziroma ko imas gor vec vplacil, kako ves katera instanca nekega dolocenega attributa pripada kateremu placilu.

dolenc ::

Lahko dodaš še eno cifro v AttributeName, ki bo pomenila tip plačilnega sistema xxxx1, recimo. Vrednosti pobereš z funkcijo Right(ali substr), pa je to to :). To polje nastaviš za ključ. Če pa potrebuješ še ostale stvari (datume....) pa dodajaš stolpce, ki so bolj pregledni.

Zgodovina sprememb…

  • spremenil: dolenc ()

MrBrdo ::

V tem primeru bi bilo najbolše uporabit document-orientated database (npr. MongoDB). V MSSQL bi bilo pa verjetno najboljše (malo si res slabo opisal problem) naredit asociacijo v smislu da imaš eno glavno tabelo (PaymentDetails) in še eno (PaymentDetailParameters) in imaš med njima razmerje one-to-many (en PaymentDetail ima lahko več PaymentDetailParameter-ov). V prvi tabeli združiš atribute ki jih rabiš pri vseh plačilnih metodah, v drugi pa lahko imaš podobno kot zdaj (AttrName in Value), čeprav meni osebno je to ful grda rešitev.
MrBrdo

Zgodovina sprememb…

  • spremenilo: MrBrdo ()

programercek ::

Bom podrobno opisal problem...

Želim tabelo, ki bo shranila plačilne kartice in za vse druge plačilne sisteme.
Ne želim imeti tabele za vsak plačilni sistem.

Torej vse bi rad imel v eni tabeli, a se pojavi en problem.

Če imam eno tabelo in hocem vse v eno tabelo shranit,
nastane problem kaj vpisat pod email.

Primer:
UserId | CardId | Creditcardnumber | Cardonnumber | email
43343 43242 1111111111111 kdasdklklkj NULL

Če imam moneybookers:
UserId | CardId | Creditcardnumber | Cardonnumber | email
43343 43244 NULL NULL k daosjioda@gmail.com

To ni v redu rešitev, da moram v vsak prazen podatek shraniti NULL.
Problem nastane tudi, če se čez eno leto odločim za nov plačilni sistem.
Potem moram spet en stolpec dodat, če je ta potreben.

Potrebujem drugačno rešitev.

Poleg tega moram za vsako transakcijo shranjevati koliko je uporabnik vplačal, koliko ima še na računu itd... Koliko je porabil in še vse ostale transakcije.

Poglejte spodaj ali je ta rešitev ustrezna.




1. tabela: USERS
UserId | FirstName
148 Gregor
904
111

2. tabela: TRANSACTIONS
UserId | PaymentMethod
148 Visa


3. tabela: TRANSACTION_DATA
UserId | AttributeName | Value
148 Credit card number 111111111111111111
148 Number on card 111111111111111111
148 Moneybookers dashdahsuid@gmail.com
148 PayPal 4324732747892@gmail.com


Pol pa če hočeš dobit podatek kličeš where UserId=148

Pa pol dodaš samo še polje CardId




Potem pa moraš v četrto tabelo transactions spravit vse kar je vezano z računom.

tbl_transactions zgleda takole:
- UserId
- Transaction
- Amount


Tu pa nato določim Amount = numeric.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Myslq index ne deluje???

Oddelek: Izdelava spletišč
172031 (1809) algo
»

[C#] Xml Serializacija Attribut pred Namespace

Oddelek: Programiranje
9891 (777) Looooooka
»

[Linux - Grub] OS se mi noče naložiti

Oddelek: Operacijski sistemi
191538 (1253) kriko1
»

PHP - pomoč

Oddelek: Izdelava spletišč
131781 (1425) BlueRunner
»

SQL select problemček

Oddelek: Programiranje
71004 (874) darh

Več podobnih tem