Shranjevane podatkov v drugo tabelo

Problemi z drugimi jeziki kot so c++, cgi, java, itd.
Odgovori
domen80
Prispevkov: 181
Pridružen: 23.01.2008 16:37:19

Shranjevane podatkov v drugo tabelo

Odgovor Napisal/-a domen80 » 05.08.2010 17:17:00

Zdravo,

kaj se vam zdi takšen način shranjevanja v tabelo:

string CreditCardNumberEncrypt = Encrypt(CreditCardNumber.Text);
string NameOnCardEncrypt = Encrypt(NameOnCard.Text);

MembershipUser myObject = Membership.GetUser();
string UserID = myObject.ProviderUserKey.ToString();

SqlDataSource2.InsertParameters["UserID"].DefaultValue = UserID;
SqlDataSource2.InsertParameters["PaymentType"].DefaultValue = DropDownList4.Text;
SqlDataSource2.Insert();


//Find Max Private key
SqlConnection conn = new SqlConnection("data source=.\\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\\aspnetdb.mdf;User Instance=true");
SqlDataAdapter a = new SqlDataAdapter
("select MAX(PaymentId) from tbl_payments;", conn);
DataSet s = new DataSet();
a.Fill(s);
foreach (DataRow dr in s.Tables[0].Rows)
{

Label3.Text = (dr[0].ToString());



string PaymentId = (dr[0].ToString());

string year = YYYY.Text;
string yearEnd = year.Substring(year.Length - 2);

var TestRecords = new[] {
new { UserID = UserID,
CARDID = PaymentId,
Attribute = "Credit card number",
Value = CreditCardNumberEncrypt },
new { UserID = UserID,
CARDID = PaymentId,
Attribute = "Name on card",
Value = NameOnCardEncrypt },
new { UserID = UserID,
CARDID = PaymentId,
Attribute = "Expiry Date",
Value = MM.Text +"/" + yearEnd }};
foreach (var item in TestRecords)
{
SqlDataSource1.InsertParameters["UserId"].DefaultValue = item.UserID;
SqlDataSource1.InsertParameters["CARDID"].DefaultValue = item.CARDID;
SqlDataSource1.InsertParameters["AttributeName"].DefaultValue = item.Attribute;
SqlDataSource1.InsertParameters["Value"].DefaultValue = item.Value;
SqlDataSource1.Insert();


Kot je razvidno se ključ v stolpcu PaymentId najprej shrani v tabelo, nato ko je ključ shranjen z queryjem najdem zadnji zapis, ki ga nato shranim v drugo tabelo. Tako lahko povežem z joinom

Kaj predlagate?

M.C
Prispevkov: 630
Pridružen: 24.02.2003 14:27:43

Shranjevane podatkov v drugo tabelo

Odgovor Napisal/-a M.C » 05.08.2010 18:46:20

mysql ima naprimer last_insert_id, ali nekaj takega, pri autoincrement se mi zdi. Tako lahko dobiš vnaprej id ki ga rabiš za insert v master in detail.
Jaz bi vse skupaj dal v bazno proceduro.
Order is heavens first rule. Therefore some must be better than the rest.

domen80
Prispevkov: 181
Pridružen: 23.01.2008 16:37:19

Shranjevane podatkov v drugo tabelo

Odgovor Napisal/-a domen80 » 05.08.2010 19:34:17

mysql ima naprimer last_insert_id, ali nekaj takega, pri autoincrement se mi zdi. Tako lahko dobiš vnaprej id ki ga rabiš za insert v master in detail.
Jaz bi vse skupaj dal v bazno proceduro.
Ja tukaj nastane problem, kaj se zgodi v primeru, če 100 uporabnikov hkrati shrani podatek.
tukaj nastane problem.

Saj jaz nimam problema, da bi shranil dva podatka hkrati,
problem je ker želim vse podatke o plačilnih sistemih imeti v eni tabeli,,
zato pa moram uporabit funkcijo new, ki shrani istolčasno vse podatke v isti stolpec.

Še eno vprašanje:
predstavljaj si da imaš različne plačilne sisteme in to bi rad shranil.
kaj bi ti uporabil več tabel, ali eno tabelo?

meni je nesmiselno, da za vsak plačilni sistem uporabim novo tabelo?

kaj praviš?

domen80
Prispevkov: 181
Pridružen: 23.01.2008 16:37:19

Shranjevane podatkov v drugo tabelo

Odgovor Napisal/-a domen80 » 05.08.2010 19:34:47

mysql ima naprimer last_insert_id, ali nekaj takega, pri autoincrement se mi zdi. Tako lahko dobiš vnaprej id ki ga rabiš za insert v master in detail.
Jaz bi vse skupaj dal v bazno proceduro.
Ja tukaj nastane problem, kaj se zgodi v primeru, če 100 uporabnikov hkrati shrani podatek.
tukaj nastane problem - v mojem prikazanem primeru.

Saj jaz nimam problema, da bi shranil dva podatka hkrati,
problem je ker želim vse podatke o plačilnih sistemih imeti v eni tabeli,,
zato pa moram uporabit funkcijo new, ki shrani istolčasno vse podatke v isti stolpec.

Še eno vprašanje:
predstavljaj si da imaš različne plačilne sisteme in to bi rad shranil.
kaj bi ti uporabil več tabel, ali eno tabelo?

meni je nesmiselno, da za vsak plačilni sistem uporabim novo tabelo?

kaj praviš?



M.C
Prispevkov: 630
Pridružen: 24.02.2003 14:27:43

Shranjevane podatkov v drugo tabelo

Odgovor Napisal/-a M.C » 05.08.2010 21:15:07

Če hočeš imet samo eno tabelo, potem baza ne bo normalizirana.

Zakaj se točno gre ne vem, predvidevam pa da za vsak različen način plačila insertiraš različne podatke, po možnosti so še nekateri od teh opcijski
(recimo en 'off topic' primer, v bazo spravljaš podatke o cvetu, in št venčnih listov, dotični cvet pa le teh sploh nima.)
v tem primeru, in pri samo "eni" tabeli, ki bo imela "nestatične" podatke:

master:

Koda: Izberi vse

  
id_placila       id_nacina_placila
1                   1                                   
2                   3                   
etc    

detail:

Koda: Izberi vse

  
id_placila       id_podatek    podatek  
1                   1                        300
1                   2                        žblj
2                   1                        500
etc    

rabiš še 2 šifranta: za način plačila in podatek.

Takole naj bi bila kolikor vidim baza normalizirana. O tem ali naj bo baza normalizirana ali ne se mnenja krešejo.
Vsekakor je pisanje sql-ov na nenormalizirani bazi 'mala malca', na normalizirani pa ne tako zelo "mala malca"

Jaz bi, kot opisano, odločitev pa je tvoja.
Order is heavens first rule. Therefore some must be better than the rest.

Odgovori