Autor Zpráva
_martin
Profil
Zdravím, potřeboval bych poradit s návrhem MySQL databáze eshopu. Především se jedná o tabulku objednávek 'order', která (mimo jiné) obsahuje fakturační a dodací adresy. Ty jsou uloženy v tabulce 'address'. Tbl. 'order' na ně odkazuje sloupci 'shipping_address_id' respektive 'payment_address_id'. Problém nastane, když si uživatel svou adresu změní - adresa u již provedené objednávky by přeci měla zůstat při starém.

Řešením by tedy bylo, aby tbl. 'order' obsahovala i vlastní sloupce pro dodací a fakturační adresy. Nicméně to mi nepříjde zrovna jako elegantní řešení, proto se ptám, jak v praxi vypadá návrh této části db eshopu? Nebo jak byste to řešili vy?
Amunak
Profil
Já bych si udělal tři tabulky uživatelé, adresy a objednávky. U objednávky by bylo id uživatele a id adresy. U uživatele by bylo id aktuální adresy (jakože asi jeho trvalé bydliště - místo kam zasílat poštu). Navíc se pak může lišit třeba dodací, fakturační a registrační adresa. Vlastně tedy místo sloupců pro adresu u obědnávky budeš odkazovat na tabulku s adresami. Počkej, nemyslels to tak vlastně? :) Nepřijde mi na tom nic neelegantního. Ostatně u objednávky do ní snad netřeba plést uživatele (reference tam bude jen proto aby si mohl objednávku prohlížet) ale jinak s adresou toho uživatele objednávka nemusí mít nic společného (může to obědnat na firmu, nebo třeba i pro někoho cizího, ...)
Kajman
Profil
Když měníte použitou adresu, udělejte si nové id.
_martin
Profil
Amunak:
jestli jsem to pochopil správně, tak by to znamenalo, že by v tbl. adres byly některé záznamy editovatelné uživateli a jiné zase ne?

Kajman:
ano, to mě také napadlo. Nicméně bych byl radši, kdyby tento problém mohl být řešen v samotném návrhu db, než v aplikaci...
Amunak
Profil
_martin:
Ne. Každé nové adrese kterou si uživatel vymyslí bys v tabulce adres přiřadil nové ID a prostě bys jí tam přidal. Jediné co je dobré ošetřit je to aby ti nevznikaly (třeba chybou uživatele) duplicitní adresy, i když to ničemu vyloženě nevadí.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0