---
title: "Många till många"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/176476-många-till-många"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Kalle M"
published: "2009-01-23T12:59:04.000Z"
updated: "2009-01-30T11:37:47.000Z"
replies: 20
views: 1009
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/176476-många-till-många"
---

# Många till många

_Sida 1 av 2._

## #1 — Kalle M, 2009-01-23T12:59Z

Vad är det som säger att relationen är många till många?

Se bifogad bild.

Är det TblOrder och tblProdukt?

Att en order kan ha många rader i tblorderrader och att även en produkt kan ha många rader i tblOrderrader?

Bilagor:

- [relationer.gif](https://www.webforum.nu/a/19834.gif)

Permalänk: https://www.webforum.nu/p/176476

## #2 — überfuzz, 2009-01-23T14:06Z

Det är lättare än du tror. Vi tar ett förspänt exempel med följande två tabeller; tblkund, tblorder.

1. Kan tex en kund göra flera beställningar?
2. Kan en och samma order göras av flera kunder?

Om man utgår ifrån att svaret på fråga ett är JA. Då kan ju flera rader i tblorder kopplas till samma kundnr. Vi har alltså många till en. Svaret på fråga två är sannolik ja, men i praktiken är det liten chans att flera kunder gör exakt samma beställning. Resultatet blir att du inte behöver göra en många till många relation här. Du kan nöja dig med att låta en kund göra hur många beställningar som helst, så länge den betalar alltså.

Permalänk: https://www.webforum.nu/p/2166310

## #3 — Kalle M, 2009-01-23T14:30Z

Det finns ju några varianter som "En till många", "En till En" och "många till många".

Vad är det som utmärker varianten "många till många" i mitt exempel?

Är det  att en order kan ha många rader i tblorderrader och att även en produkt kan ha många rader i tblOrderrader?

Permalänk: https://www.webforum.nu/p/2166316

## #4 — überfuzz, 2009-01-23T14:55Z

> **Kalle M skrev:**
>
> Vad är det som utmärker varianten "många till många" i mitt exempel?
> 
> Är det  att en order kan ha många rader i tblorderrader och att även en produkt kan ha många rader i tblOrderrader?

Ehh... du har ingen sån relation i din struktur.

Permalänk: https://www.webforum.nu/p/2166320

## #5 — Kalle M, 2009-01-23T15:08Z

Har jag inte? Då har jag fattat fel isåfall.

Enligt en bok jag har så löses detta genom att man skapar en kopplingstabell (Ex tblOrderrader).

Men vad är det som utmärker typen "många till många"(N:N) relation?

Permalänk: https://www.webforum.nu/p/2166322

## #6 — Peter S, 2009-01-23T15:14Z

Ett rättighetssystem, där användare och saker de skall kunna komma åt finns, kan modelleras på följande vis: UserTable\[1\]-----\[N\]UserEntityAccess\[M\]-----\[1\]Entity.

D.v.s. i UserEntityAccess sparar du information om vilka användare som får komma åt vilka entities. I den tabellen kan samma användarid finnas flera gånger och samma entitetsid finnas flera gånger (dock endast på samma rad en gång!). I detta scenario finns det en många-till-många-relation mellan användare och entiteter.

Permalänk: https://www.webforum.nu/p/2166323

## #7 — Kalle M, 2009-01-23T15:19Z

Men hur skulle isåfall min struktur se ut för att få till en "många till många"?

Jag var bergsäker att jag hade det,

Eller hade det varit en många till många relation om jag inte hade haft med tblOrderrader?

Hade det varit många till många om jag inte hade haft kundtabellen?

Permalänk: https://www.webforum.nu/p/2166324

## #8 — Peter S, 2009-01-23T21:56Z

Du har redan en många-till-många-relation mellan ordrar och produkter. Resultatet av den relationen är tabellen tblOrderrader. (Man kan ifrågasätta huruvida *Antal* skall vara med som ett fält i den tabellen, men det är en helt annan femma.)

Permalänk: https://www.webforum.nu/p/2166353

## #9 — Lasp, 2009-01-23T22:07Z

Tycker att du börjar få en bra ordning på dina exempel.
Du bör kanske gå ett steg längre dock i normalisewringen.
Jag tycker att det var ett bra exempel du hade även där.
 Men det finns en fjärde grad.
Fundera på vad som händer om kunden byter adress eller telefon! Hur kan du säkerställa historiska data.
Och en Produkt har olika pris vid olika tidpunkter. Där bör man se upp!
Så normalisera lite till och var inte rädd för TS.

Permalänk: https://www.webforum.nu/p/2166356

## #10 — Kalle M, 2009-01-23T22:14Z

Peter S:

Så jag har en många till många relation mellan tblOrder och tblProdukt.
Hur blir det en många till många relation där?

Är det att en order kan finnas på många rader i tblOrderrader och att även Produkt kan finnas på flera rader i tblOrderader?

Permalänk: https://www.webforum.nu/p/2166358

## #11 — Peter S, 2009-01-23T22:39Z

Precis. En specifik order kan finnas på flera rader i tblOrderrader, och en specifik produkt kan finnas på flera rader i tblOrderrader.

Permalänk: https://www.webforum.nu/p/2166362

## #12 — Kalle M, 2009-01-23T22:50Z

Tackar så mkt för det!

Slutfundering1:
I tblOrderrader har jag just nu ingen primärnyckel.
Är det ok att inte ha det i den tabellen?

Slutfundering2:
Kundnr i tblkund har en primärnyckel.
Kundnr i tblkund är relaterad till kundnr i tblOrder. (En till många).

Kan man då säga att kundnr i tblOrder är en sekundärnyckel?

Permalänk: https://www.webforum.nu/p/2166367

## #13 — Peter S, 2009-01-24T09:32Z

1)
Primärnyckel i tblOrderrader skall vara ordernr och produktnr.

2)
Kundnr är primärnyckel i tblKund.

Nej, kundnr i tblOrder är *främmande nyckel* till tblKund.kundnr.

Permalänk: https://www.webforum.nu/p/2166386

## #14 — Kalle M, 2009-01-24T11:13Z

Peter S:

Jag har tolkat det som att kundnr i tblkund är en primärnyckel och att kundnr i tblOrder är en sekundärnyckel. Trodde att sekundärnyckel är samma sak som en främmande nyckel!?

Vad är isåfall en sekundärnyckel i min tabellstruktur?

Permalänk: https://www.webforum.nu/p/2166391

## #15 — Peter S, 2009-01-24T11:34Z

Sekundär nyckel är (nödvändigtvis) inte samma sak som en främmande nyckel. I detta fall är inte kundnr sekundär nyckel i tblOrder.

En sekundär nyckel är samma sak som en alternativ nyckel, vilket innebär att den kan användas som primärnyckel.

Av de fält som syns i din modell finns troligtvis inga sekundära nycklar. Ett exempel: Säg att du har en tabell med användare kallad Users som ser ut enligt följande:

```
id (autoinc) | personnr (string) | namn (string)
```

Då är både id och personnr alternativa nycklar i Users. Men det är bara en av dem du väljer som primärnyckel; den andra blir då sekundär nyckel.

Permalänk: https://www.webforum.nu/p/2166394

## #16 — Kalle M, 2009-01-24T11:39Z

Men tblkund är väl en primärtabell och tblOrder är väl en sekundärtabell till tblkund?

Tycker jag läst ett antal gånger att sekundärnyckel är samma sak som en främmande nyckel. Antingen så står det fel eller så tolkar jag det fel.

Permalänk: https://www.webforum.nu/p/2166396

## #17 — Peter S, 2009-01-24T11:48Z

Har aldrig hört talas om primära/sekundära tabeller. Var har du läst om det?

Permalänk: https://www.webforum.nu/p/2166397

## #18 — Kalle M, 2009-01-24T12:04Z

Nu sökte jag snabbt dock:

Kolla inläggen längre ner på sidan:
<http://pcforallasmart.idg.se/forum/thread.jsp?forumid=6&rootid=421333>

Hur skulle jag isåfall få till en sekundärnyckel i min tabellstruktur?

Om jag skulle (Av nån anledning) sätta primärnyckel på både kundnr i tblkund och kundnr i tblOrder. (En till en). Skulle kundnr tblOrder fortfarande vara en främmande nyckel?

Permalänk: https://www.webforum.nu/p/2166398

## #19 — Peter S, 2009-01-24T22:21Z

Okej, jag förstår vad de säger i länken du postade, men just begreppen *primära/sekundära tabeller* vet jag inte varifrån de fått. Men det är väl en bisak i sammanhanget.

Sekundärnycklar är ingenting man skapar för skapandes skull; snarare är det så att de uppstår naturligt (se mitt exempel med id och personnr ovan). Med andra ord bör du inte lägga någon större vikt vid det.

Det finns ingen som helst anledning att sätta kundnr som primärnyckel i tblOrder, eftersom ett kundnr inte unikt identifierar en order (en kund kan ju ha flera ordrar). Mer sannolikt bör primärnyckeln i tblOrder vara ett ordernummer.

Ett fält F kan vara både primärnyckel och främmande nyckel. Vanligt är då att F är en del av en sammansatt nyckel i den tabell där den är primärnyckel.

Så länge kundnr är primärnyckel i tblKund så kommer alla förekomster av kundnr i de andra tabellerna att vara främmande nycklar till tblKund.kundnr (såvida de definieras till att vara främmande nycklar).

Permalänk: https://www.webforum.nu/p/2166462

## #20 — Lasp, 2009-01-24T22:31Z

Just därföt lät man ofta dessa fält ligga efter varandra i vissa Db verktyg
Exempelvis KundNr 6 Tkn samt OrderNr 6 tkn Då kunde man kontatinera (slå ihop) KundOrderNR 12 tkn vid vissa typer av transaktioner.
Sånt behövs ju inte idag med dagens datakraft.

Permalänk: https://www.webforum.nu/p/2166464

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/176476-många-till-många  
Nästa sida: https://www.webforum.nu/amne/databaser-sql/176476-många-till-många/page2.md
