Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

Tabel met meerdere Foreign Keys

Pagina: 1
Acties:

Onderwerpen


  • Jaspertje
  • Registratie: september 2001
  • Laatst online: 09-03 13:24

Jaspertje

Max & Milo.. lief

Topicstarter
Tweakers,

Ik heb een hele nieuwe startpost geschreven met het probleem zelf, want mijn voorbeeld was niet goed. Excuus. (Daarin is ook het voorbeeld veranderd, hiercvoor ging het over auto's motoren en motorinhouden :) )

Ik heb het volgende probleem:
Zowel een lening als een verzekering kunnen een of meerdere gekoppelde portfolio's hebben maar een portfolio kan niet bij zowel een lening als een verzekering horen. Lening en verzekering hebben niets met elkaar te maken maar in het objectenmodel is de portfolio hetzelfde.

In de database kan dit op meerdere manieren opgelost worden en ik zoek eigelijk de beste.
1. In de portfolio tabel referentie's leggen naar beide tabellen en dmv een FK en een trigger om te controleren of een portfolio al niet bij een ander object (lening of verzekering) hoort.
http://www.jasperheus.nl/DBProbleem1.png

Het nadeel hiervan is wel als er nog een derde object komt wat ook aan portfolio gekoppeld moet worden, de tabel en de trigger uitgebreid moeten worden.

2. Tussen beide tabellen een losse koppeltabel zetten met daarin een 1-1 relatie tussen de portfolio en de gekoppelde portfolio. Daardoor kan een portfolio niet aan meerdere leningen/verzekeringen gekoppeld worden. Dan zullen er alsnog triggers geschreven moeten worden die controleren of de portfolio niet al voor het andere object gebruikt wordt.
Het voordeel is dat een nieuwe koppelingen een extra tabel oplevert waardoor de rest niet aanpast. Het nadeel is dat er dan waarschijnlijk meerdere triggers geupdate moeten worden
http://www.jasperheus.nl/DBProbleem2.png

3. Twee lossen portfolio tabellen maken. 1 voor leningen en 1 voor verzekeringen. Dit gaat alleen een huge beheersprobleem opleveren als er een update plaatsvindt op de tabel

Ik hoop dat ik nu wel duidelijk ben. Excuus nogmaals

NB. Gebruik SQL 2000

Jaspertje wijzigde deze reactie 20-07-2007 10:07 (85%)


  • P_de_B
  • Registratie: juli 2003
  • Niet online
Zou je niet overwegen een tabel 'Voertuig' te maken, met daarbij (eventueel) een tabel Voertuigtype?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Creepy
  • Registratie: juni 2001
  • Laatst online: 00:55

Creepy

Moderator Devschuur®

Tactical Espionage Splatterer

Een andere optie zou zijn om van motor en auto 1 tabel "voertuig" o.i.d. te maken met een type aanduiding. Kan je ook vrij eenvoudig andere type's (boot, brommer, broodrooster etc.) toevoegen.

Edit: snelle P_de_B

Meteen even een move naar SEA. In DTE heeft het niet veel te zoeken ;)

Creepy wijzigde deze reactie 19-07-2007 12:53 (19%)

We're building self-driving cars, but we haven't even figured out how to make sure vacuum cleaners don't join botnets.


  • Tukk
  • Registratie: januari 2002
  • Laatst online: 06-03 17:14

Tukk

De α-man met het ẞ-brein

Verwacht je dat er velschillende eigenschappen nog kunnen komen voor een auto, boot of motor?
Ander zet je de data in 1 tabel, met een extra kolom of het een auto, motor of boot betreft.

Als er dan alsnog eigenschappen voor een bepaald soort rij/vaartuig komt kun je een tabel aanmaken met de kolommen RIJTUIGID, EIGENSCHAPNAAM, WAARDE. Ben je geheel vrij voor mogelijk aanpassingen.

@Eens met de blauwe en rode hierboven. :/

Tukk wijzigde deze reactie 19-07-2007 12:55 (5%)

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.


  • EfBe
  • Registratie: januari 2000
  • Niet online
Ik vraag me bij het schema meteen af: wat is de reden dat motorinhoud een entity is? Volgens mij is dat nl. een attribute van 'motor' (niet die dingen met 2 wielen, maar die dingen die voorin in je panda liggen ;))

Lead developer of LLBLGen Pro.
https://fransbouma.com


  • Jaspertje
  • Registratie: september 2001
  • Laatst online: 09-03 13:24

Jaspertje

Max & Milo.. lief

Topicstarter
Excuus dat ik niet helemaal duidelijk ben. Ik gebruik dit als (blijkt nu, verschikkelijk slecht) voorbeeld. Normaal zou ik dit idd ook anders modeleren. Dit is dan ook puur het voorbeeld. Theoretisch zou er ook een heel ander ding aan motorinhoud gekoppeld kunnen worden.

In werkelijkheid gaat het over portfolio's (beleggingen) die aan verzekeringen gekoppeld kunnen worden, maar ook aan bankaire producten. Waarbij motor en auto dus compleet niets met elkaar te maken zouden hebben. (Ik heb dus toch een slecht voorbeeld gekozen)
quote:
EfBe schreef op donderdag 19 juli 2007 @ 12:57:
Ik vraag me bij het schema meteen af: wat is de reden dat motorinhoud een entity is? Volgens mij is dat nl. een attribute van 'motor' (niet die dingen met 2 wielen, maar die dingen die voorin in je panda liggen ;))
In het 'objectenmodel' is motorinhoud ook een entiteit, vandaar dat ie los is.

Jaspertje wijzigde deze reactie 19-07-2007 18:43 (27%)


  • EfBe
  • Registratie: januari 2000
  • Niet online
quote:
Jaspertje schreef op donderdag 19 juli 2007 @ 18:42:
Excuus dat ik niet helemaal duidelijk ben. Ik gebruik dit als (blijkt nu, verschikkelijk slecht) voorbeeld. Normaal zou ik dit idd ook anders modeleren. Dit is dan ook puur het voorbeeld. Theoretisch zou er ook een heel ander ding aan motorinhoud gekoppeld kunnen worden.

In werkelijkheid gaat het over portfolio's (beleggingen) die aan verzekeringen gekoppeld kunnen worden, maar ook aan bankaire producten. Waarbij motor en auto dus compleet niets met elkaar te maken zouden hebben. (Ik heb dus toch een slecht voorbeeld gekozen)
ALTIJD echte omschrijvinge/code gebruiken ipv faked voorbeelden, want dat gaat altijd mis.
quote:
[...]
In het 'objectenmodel' is motorinhoud ook een entiteit, vandaar dat ie los is.
Dan nog is het een attribute en geen entiteit. Motorinhoud is een value, geen entiteit met een uniek identificerend attribute, want het heeft maar 1 attribute, nl. zichzelf.

Zolang je motorinhoud handhaaft als een entiteit blijft je model fout en gammel.

Lead developer of LLBLGen Pro.
https://fransbouma.com


  • Jaspertje
  • Registratie: september 2001
  • Laatst online: 09-03 13:24

Jaspertje

Max & Milo.. lief

Topicstarter
Ik heb de topicstart herschreven. Het echte probleem staat nu beschreven ipv een slecht voorbeeld.

  • ikke007
  • Registratie: juni 2001
  • Laatst online: 22:35

ikke007

SQL Addict

In Postgres kun je dit oplossen met een 'Check' (weet niet of dat SQL standaard is en of dat door andere databases wordt ondersteund). Dit is een redelijk simpele constraint welke checkt of een expressie een boolean true oplevert en anders een error raised

http://www.postgresql.org...tive/ddl-constraints.html

voorbeeld
SQL:
1
2
3
4
5
6
CREATE TABLE portfolio (
    portfolioid SERIAL,
    leningid integer CHECK (leningid IS NULL OR verzekeringid IS NULL),
    verzerkeringid integer CHECK (leningid IS NULL OR verzekeringid IS NULL),
    rekeningnummer varchar(15)
);

NB: je startpost is duidelijk maar het is wel raar als de eerste reactie's over voertuigen en auto's gaan en dat niet in je startpost terug komt :)

ikke007 wijzigde deze reactie 20-07-2007 09:42 (11%)

Lets remove all security labels and let the problem of stupidity solve itself


  • Efie
  • Registratie: juli 2003
  • Laatst online: 12-09-2007
Zou je niet een tabel ProductPortfolio (verzekering/lening) kunnen introduceren als koppeltabel met drie velden.

1. ProductId (verzekering/lening id en later evt. andere producten)
2. PortfolioId
3. Id

In je tabel verzekeringen en portfolio maak je ook een extra veld ProductId (oid) en die heeft dan een 1 op 1 relatie met het Id in de Product-tabel.

Op deze manier koppel je in deze tabel je verzekering of lening aan een of meerdere portfolio's en mag elk portfolio dus maar 1 keer voorkomen in deze tabel, dan heb je geen triggers nodig voor controles.

Misschien zie ik wat over het hoofd, maar volgens mij moet het zo kunnen.

Dit komt een beetje overeen met het voertuig-verhaal in je vorige startpost

Efie wijzigde deze reactie 20-07-2007 11:13 (19%)


  • Dido
  • Registratie: maart 2002
  • Laatst online: 18:02

Dido

heforshe

Optie 1, met een extra veldje in "Portfolio", om aan te geven waar het aan gelinkt is?

Waar je dan verzekering/lening ID in 1 veldje kwijt kunt ipv in twee, met een FK over Extra veldje+ID?

Dido wijzigde deze reactie 20-07-2007 11:03 (38%)

Wat betekent mijn avatar?


  • Jaspertje
  • Registratie: september 2001
  • Laatst online: 09-03 13:24

Jaspertje

Max & Milo.. lief

Topicstarter
quote:
Dido schreef op vrijdag 20 juli 2007 @ 11:01:
Optie 1, met een extra veldje in "Portfolio", om aan te geven waar het aan gelinkt is?

Waar je dan verzekering/lening ID in 1 veldje kwijt kunt ipv in twee, met een FK over Extra veldje+ID?
Dus dan in Portfolio een 'type' lening of verzekering meegeven

  • Dido
  • Registratie: maart 2002
  • Laatst online: 18:02

Dido

heforshe

quote:
Jaspertje schreef op vrijdag 20 juli 2007 @ 13:48:
Dus dan in Portfolio een 'type' lening of verzekering meegeven
Precies :)

Voordeel is dat als je later meerdere mogelijkheden krijgt, je je Portfolio-tabel niet hoeft aan te passen.

Wat betekent mijn avatar?


  • Jaspertje
  • Registratie: september 2001
  • Laatst online: 09-03 13:24

Jaspertje

Max & Milo.. lief

Topicstarter
quote:
Dido schreef op vrijdag 20 juli 2007 @ 14:38:
[...]

Precies :)

Voordeel is dat als je later meerdere mogelijkheden krijgt, je je Portfolio-tabel niet hoeft aan te passen.
Dit is een goede oplossing ben ik inmiddels achter... maaar........ hoe kan ik er nu voor zorgen dat mijn database relationeel blijft. Ik kan nu geen cascading deletes meer gebruiken, en triggers/code moet ik ook aanpassen als ik een nieuwe type wil gebruiken. Dan gaat deze oplossing weer werk kosten
Pagina: 1


Apple iPhone 11 Microsoft Xbox Series X LG OLED C9 Google Pixel 4 CES 2020 Samsung Galaxy S20 4G Sony PlayStation 5 Nintendo Switch Lite

'14 '15 '16 '17 2018

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2020 Hosting door True