Hur hade ni designat denna enkla databas?

Permalänk
Medlem

Hur hade ni designat denna enkla databas?

Jag har ett orderformulär (dvs bara en produkt) där jag vill kunden ska kunna registrera sig och se sina ordrar och leveransadresser. Hur hade ni designat den? Framförallt relation mellan tabeller jag är intresserad av.

Jag tänker
Customer(id, customerName, username, password)
Order(id, orderdate, orderinfo, FK Customer_id)
DeliveryAddress(id, street, zipCode, city, FK Customer_id)

Hur tycker ni dessa relationer ser ut?
En kund kan ju ha många ordrar men en order tillhör bara en kund.
En kund kan ha flera leveransadresser men en leveransadress tillhör bara en kund (en inloggning)
Sen tillhör ju även en order en leveransadress (dit ordern skickas) men det har jag ingen relation för. Eller ska jag ha en FK i adress till order stället?

Permalänk
Medlem

Knyt DeliveryAddress direkt till ordern eller lägg till fälten i samma tabell. Just nu är du bunden till att skicka ordrar till kundens hemadress och alla ordrar som läggs kommer muteras/ändras ifall kunden t.ex. flyttar.

Visa signatur

| Ryzen 5800x | Asus prime x470 pro | Asus rtx 3080 tuf oc | Gskill 32gb 3,6ghz | aw3225qf |

Permalänk
Medlem

Customer (id, name, username, password, address, zipcode, city)
Order (id, orderdate, orderinfo, customer_id, delivery address, delivery zipcode, delivery city)

En kund kan säkert välja flera olika leveransadresser, samtidigt som det helt enkelt bara är relevant för din order.

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem
Skrivet av martin79:

Jag har ett orderformulär (dvs bara en produkt) där jag vill kunden ska kunna registrera sig och se sina ordrar och leveransadresser. Hur hade ni designat den? Framförallt relation mellan tabeller jag är intresserad av.

Jag tänker
Customer(id, customerName, username, password)
Order(id, orderdate, orderinfo, FK Customer_id)
DeliveryAddress(id, street, zipCode, city, FK Customer_id)

Hur tycker ni dessa relationer ser ut?
En kund kan ju ha många ordrar men en order tillhör bara en kund.
En kund kan ha flera leveransadresser men en leveransadress tillhör bara en kund (en inloggning)
Sen tillhör ju även en order en leveransadress (dit ordern skickas) men det har jag ingen relation för. Eller ska jag ha en FK i adress till order stället?

Skrivet av Ragin Pig:

Knyt DeliveryAddress direkt till ordern eller lägg till fälten i samma tabell. Just nu är du bunden till att skicka ordrar till kundens hemadress och alla ordrar som läggs kommer muteras/ändras ifall kunden t.ex. flyttar.

Om du har tänkt att erbjuda kunden att välja bland sparade leveransadresser så blir det en bra design så som du har tänkt.
Det finns ju också en bra poäng från Ragin Pig och det är att försöka bevara historiken. Jag skulle därför valt att spara den valda leveransadressen för en order så att den inte går att ändra i efterhand (även om leveransadresserna förmodligen kan redigeras). Det går att göra t.ex. med extra fält på varje order.

Permalänk

Ändra även så att
Customer(id, customerName, username, password) får
Customer(customerid, customerName, username, password)
så blir det lättare att knyta an de andra tabellerna med en JOIN eller dylikt om det behövs.

Order(customerid, orderid, orderdate, orderinfo, FK Customer_id)
DeliveryAddress(customerid, street, zipCode, city, FK Customer_id)

Känner också att du inte ska ha id som namn på fält på varje tabell utan se till att det är döpt till vad det ska avses , för att undvika förvirring om någon annan ska se på tabellen.