Modelleer probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik moet voor een systeem een drilldown bedenken echter loop ik tegen een DB modelleer probleem aan.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Voorwaarde:
Een land heeft 1 of meerdere provincies
Een land heeft 1 of meerdere landdelen
Een land heeft 1 of meerdere steden
Een provincie behoord tot 1 of meerdere landdelen
Een Provincie heeft 1 of meerdere steden
Een landdeel heeft 1 of meerdere provincies
Een stad behoord tot 1 provincie
Een stad behoord tot 1 landdeel
Een stad behoord tot 1 land
Een stad behoord altijd tot 1 land, 1 provincie en 1 landdeel. (Dus combinatie land,landdeel,provincie is uniek voor een stad (echter moeten landdeel en provincie tot hetzelfde land behoren))

---------------------------------------------------------------------------------
Oplossing:1 
---------------------------------------------------------------------------------
Land:
Landcode(PK) | Landnaam

Stad:
Landcode(PK/FK(Land.landcode)) | Provincienaam (PK) | Landdeelnaam (PK) | Stadnaam (PK)


---------------------------------------------------------------------------------
Oplossing:2
---------------------------------------------------------------------------------
Land:
Landcode(PK) | Landnaam

Provincie:
Landcode(PK//FK(Land.landcode)) | Provincienaam(PK)

Landdeel:
Landcode(PK//FK(Land.landcode)) | Landdeelnaam(PK)

Stad:
Provincie (PK (Provincie.PK)) | Landdeel (PK (Landdeel.PK)) | Stadnaam (PK)

(Hier kan het probleem onstaan dat een stad in provincie van land 1 valt en in een landdeel van land 2!)

---------------------------------------------------------------------------------


Hoe kan ik de entiteiten provincie en landdeel behouden zonder intergriteit van de data te verliezen? Of is oplossing 1 toch beter?

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:03
Kan je landdeel & provincie niet in dezelfde tabel bijhouden ?
Waarbij die tabel een relatie heeft met zichzelf, waardoor je kan specifieren dat een landdeel een aantal provincies bevat ?
Dan moet je in die tabel wel ook nog een discriminator bijhouden, waarmee je aangeeft of een record dan wel een landdeel, of een provincie voorstelt.

Dit zou een oplossing kunnen zijn, mocht je niet altijd een 'landdeel' hebben, maar nu ik je topic nog eens herlees, blijkt dat je altijd een 'landdeel' hebt ? En dat een provincie nooit rechtstreeks aan een land gekoppeld wordt, maar altijd aan een landdeel ?

[ Voor 28% gewijzigd door whoami op 07-01-2010 11:38 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Landen:
ID | naam

Landdelen:
ID | naam | land_id

Provincies:
ID | naam

KoppelLanddeelProvincie
provincie_id | landdeel_id

Steden:
ID | naam | provincie_id | landdeel_id


Het ID is steeds de PK en de *_id kolommen zijn FK. Bij KoppelLanddeelProvincie is de PK (provincie_id, landdeel_id). Bij Steden is (provincie_id, landdeel_id) een FK.

Volgens mij kun je hier mee bereiken wat je wilt. Of het een ideale situatie is weet ik niet.

Edit: hmm... het is toch wat lastiger. Een provincie behoort tot meerdere landdelen, een stad tot 1 provincie én tot 1 landdeel en een landdeel kan meerdere provincies bevatten. Ik heb de tabel steden uitgebreid met het landdeel, maar het is wel een beetje vreemd denk ik.

[ Voor 44% gewijzigd door HuHu op 07-01-2010 11:41 ]


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 18-09 22:40

Nick_S

++?????++ Out of Cheese Error

Een provincie behoord tot 1 of meerdere landdelen
Daarbij mis je deze relatie, dus je zal er nog een koppeltabel tussen moeten hangen. Ook moet je dan stad aan landdeel koppelen.

Nav. edit:

Hang een id aan je koppeltabel en koppel deze met Stad, dan weet je altijd dat je een goede combinatie te pakken hebt.

Laatste edit:
@HuHu: Zullen we nu weer gewoon om en om gaan posten ipv. te blijven editten. ;)

[ Voor 38% gewijzigd door Nick_S op 07-01-2010 11:43 ]

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
HuHu schreef op donderdag 07 januari 2010 @ 11:36:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Landen:
ID | naam

Landdelen:
ID | naam | land_id

Provincies:
ID | naam

KoppelLanddeelProvincie
provincie_id | landdeel_id

Steden:
ID | naam | provincie_id | landdeel_id


Het ID is steeds de PK en de *_id kolommen zijn FK. Bij KoppelLanddeelProvincie is de PK (provincie_id, landdeel_id). Bij Steden is (provincie_id, landdeel_id) een FK.

Volgens mij kun je hier mee bereiken wat je wilt. Of het een ideale situatie is weet ik niet.

Edit: hmm... het is toch wat lastiger. Een provincie behoort tot meerdere landdelen, een stad tot 1 provincie én tot 1 landdeel en een landdeel kan meerdere provincies bevatten. Ik heb de tabel steden uitgebreid met het landdeel, maar het is wel een beetje vreemd denk ik.
Alvast bedankt voor jullie oplossingen, echter is het in deze oplossing nog steeds zo dat er een provincie kan worden geselecteerd die niet tot hetzelfde land behoord (het kan zijn dat een provincienaam voor twee landen wordt gebruikt.)

De hierarchie die voor mij belangrijk is
code:
1
2
3
4
5
Land
|_Provincie (unieke provincies per land)
|  |_Stad (unieke steden per provincie per land)
|_Landdeel (unieke landdelen per land)
   |_Stad (unieke steden per landdeel per land)

[ Voor 10% gewijzigd door Verwijderd op 07-01-2010 12:00 ]


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 18-09 22:40

Nick_S

++?????++ Out of Cheese Error

Ik denk dat dat alleen af te dwingen is dmv triggers.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Verwijderd schreef op donderdag 07 januari 2010 @ 11:51:
[...]


Alvast bedankt voor jullie oplossingen, echter is het in deze oplossing nog steeds zo dat er een provincie kan worden geselecteerd die niet tot hetzelfde land behoord (het kan zijn dat een provincienaam voor twee landen wordt gebruikt.)
Je koppelt op ID en niet op naam. Voorbeeld:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Landen:
BO | Bolivia
NL | Nederland

Landdelen:
1 | Hoogland van Bolivia | BO
2 | Waddeneilanden | NL

Provincies:
1 | Utrecht
2 | Utrecht

KoppelLanddeelProvincie:
1 | 1
2 | 2

Steden:
1 | Sucre   | 1 | 1
2 | Woerden | 2 | 2


Toevalligerwijs hebben zowel Bolivia als Nederland de provincie Utrecht. Zojuist is ontdekt dat Utrecht eigenlijk op het landdeel Waddeneilanden ligt en in Bolivia ergens in de Andes.

Nu is er 1 Utrecht die bij Nederland hoort, gekoppeld via de koppeltabel aan het landdeel Waddeneilanden, die gekoppeld is aan Nederland. De andere Utrecht (dezelfde naam, maar ander ID), is gekoppeld via-via aan Bolivia.

Dan kun je dus wel iets hebben met dezelfde naam, maar het ID en het gekoppelde land zullen dan verschillen.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Verwijderd schreef op donderdag 07 januari 2010 @ 11:51:
[...]

De hierarchie die voor mij belangrijk is
code:
1
2
3
4
5
Land
|_Provincie (unieke provincies per land)
|  |_Stad (unieke steden per provincie per land)
|_Landdeel (unieke landdelen per land)
   |_Stad (unieke steden per landdeel per land)
Die hierarchie is anders dan je in je startpost vertelt, want daarbij valt een provincie nog in één of meerdere landdelen.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Nick_S schreef op donderdag 07 januari 2010 @ 11:39:
[...]

Hang een id aan je koppeltabel en koppel deze met Stad, dan weet je altijd dat je een goede combinatie te pakken hebt.
Dat is ook nog een goede ja, dan ziet het er zo uit:

code:
1
2
3
4
5
KoppelLanddeelProvincie:
ID | provincie_id | landdeel_id

Steden:
ID | naam | koppelLanddeelProvincie_id

Acties:
  • 0 Henk 'm!

  • J2pc
  • Registratie: Oktober 2002
  • Niet online

J2pc

UT Tux Edition

Als ik het goed heb.

Een land heet 1 of meerdere landdelen en provincies
Een provincie hoort bij 1 land
Een provincie bestaat uit 1 of meer landdelen
Een landdeel hoort bij 1 land
Een landdeel bestaat/beslaat 1 of meer provincies

Een stad ligt in 1 provincie, 1 landdeel en 1 land (een stad kan niet op een landdeel/provincie grens liggen)

landdeel en provincie zijn dus 'gelijkwaardig' in de hierarchie (ze overlappen elkaar)
De oplossing van HuHu is daarmee bijna compleet ;) Nog even het land aan de provincie toevoegen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Landen:
ID | naam

Landdelen:
ID | naam | land_id

Provincies:
ID | naam | land_id

KoppelLanddeelProvincie
provincie_id | landdeel_id

Steden:
ID | naam | provincie_id | landdeel_id


bah, ff geen visio bij de hand

Waarschijnlijk kun je landdeel en provincie (is in feite ook een deel van een land) nog generaliseren naar een 'gebied', waarbij je 2 isa relaties hebt naar een provincie (met provincie attributen) of landdelen (met landdeel attributen)

"The computer is incredibly fast, accurate, and stupid. Man is unbelievably slow, inaccurate, and brilliant. The marriage of the two is a challenge and opportunity beyond imagination." © Stuart G. Walesh


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Het land hoeft niet bij de provincie, aangezien dat al blijkt uit het landdeel waar het in ligt. Als je land toevoegt aan Provincies, dan sla je die informatie dubbel op.

Als je een provincie_id hebt, dan kun je in de koppel-tabel het landdeel_id opzoeken en daarna het bijbehorende land_id.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
J2pc schreef op donderdag 07 januari 2010 @ 12:11:
Als ik het goed heb.

Een land heet 1 of meerdere landdelen en provincies
Een provincie hoort bij 1 land
Een provincie bestaat uit 1 of meer landdelen
Een landdeel hoort bij 1 land
Een landdeel bestaat/beslaat 1 of meer provincies

Een stad ligt in 1 provincie, 1 landdeel en 1 land (een stad kan niet op een landdeel/provincie grens liggen)

landdeel en provincie zijn dus 'gelijkwaardig' in de hierarchie (ze overlappen elkaar)
De oplossing van HuHu is daarmee bijna compleet ;) Nog even het land aan de provincie toevoegen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Landen:
ID | naam

Landdelen:
ID | naam | land_id

Provincies:
ID | naam | land_id

KoppelLanddeelProvincie
provincie_id | landdeel_id

Steden:
ID | naam | provincie_id | landdeel_id


bah, ff geen visio bij de hand

Waarschijnlijk kun je landdeel en provincie (is in feite ook een deel van een land) nog generaliseren naar een 'gebied', waarbij je 2 isa relaties hebt naar een provincie (met provincie attributen) of landdelen (met landdeel attributen)
Het probleem is hier dat in de KoppelLanddeelProvincie koppeltabel niet gegarandeerd is dat de landen van de provincie en landdeel gelijk zijn. het is nog steeds mogelijk om twee landen hier te combineren.

Acties:
  • 0 Henk 'm!

  • J2pc
  • Registratie: Oktober 2002
  • Niet online

J2pc

UT Tux Edition

HuHu schreef op donderdag 07 januari 2010 @ 12:06:
[...]

Dat is ook nog een goede ja, dan ziet het er zo uit:

code:
1
2
3
4
5
KoppelLanddeelProvincie:
ID | provincie_id | landdeel_id

Steden:
ID | naam | koppelLanddeelProvincie_id
Kan ook nog. Trigger op inserts/updates die checkt of aan beide kanten dezelfde land_ID aanwezig is, en je weet redelijk zeker dat je geen steden in provincies van land A, maar landdelen van land B aan het bouwen bent ;)

@ TS
wat wil je er precies mee?
Wat versta je precies onde landdelen?
Verder is de combinatie land, landdeel, provincie niet uniek voor een stad. Anders kun je maar 1 stad per land-landdeel-provincie definieren :p

[ Voor 23% gewijzigd door J2pc op 07-01-2010 12:30 ]

"The computer is incredibly fast, accurate, and stupid. Man is unbelievably slow, inaccurate, and brilliant. The marriage of the two is a challenge and opportunity beyond imagination." © Stuart G. Walesh


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
J2pc schreef op donderdag 07 januari 2010 @ 12:24:

@ TS
wat wil je er precies mee?
Wil je werkelijk zowel per landdeel (natuurgebied? water?) als per provincie bijhouden welke steden erin liggen?
Ik wil een drilldown ontwikkelen van die uiteindelijk een stad selecteerd de twee taxanomie-en die ik wil ondersteunen zijn.


Landdelen (Bijv: Noord,West, etc...)

code:
1
2
Land -> landdeel -> stad (Land 1..1* landdeel 1..1* stad)
Land -> provincie -> stad (Land 1..1* provincie 1..1* stad)

[ Voor 3% gewijzigd door Verwijderd op 07-01-2010 12:35 ]


Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 12:53

Dido

heforshe

Een land heeft 1 of meerdere provincies check
Een land heeft 1 of meerdere landdelen check
Een land heeft 1 of meerdere steden check
Een provincie behoord tot 1 of meerdere landdelen check
Een Provincie heeft 1 of meerdere steden check
Een landdeel heeft 1 of meerdere provincies check
Een stad behoord tot 1 provincie check
Een stad behoord tot 1 landdeel check
Een stad behoord tot 1 land check

volgens mij heb ik ze allemaal?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
                +---------------+
                | land          |
                +---------------+
                | id            |
                | naam          |
                +------+--------+
                       |1
       +---------------+---------------+
       |n                              |n
+------#--------+              +-------#-------+
| landdeel      |              | provincie     |
+---------------+              +---------------+
| id            |              | id            |
| land.id       |              | land.id       |
| naam          |              | naam          |
+------+--------+              +-------+-------+
      1|                               |1
       +----------------+--------------+   
                       n|n
                +-------#-------+
                | landdeel-     |
                | provincie     |
                +---------------+
                | id            |
                | landdeel.id   |
                | provincie.id  |
                +-------+-------+
                        |1   
                        | 
                        |n
                +-------#-------+
                | stad          |
                +---------------+
                | id            |
                | ld/pr.id      |
                | naam          |
                +---------------+

edit: behalve dus dat inderdaad een provincie van land A bij een laddeel van land B kan komen.

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • J2pc
  • Registratie: Oktober 2002
  • Niet online

J2pc

UT Tux Edition

Verwijderd schreef op donderdag 07 januari 2010 @ 12:34:
[...]


Ik wil een drilldown ontwikkelen van die uiteindelijk een stad selecteerd de twee taxanomie-en die ik wil ondersteunen zijn.


Landdelen (Bijv: Noord,West, etc...)

code:
1
2
Land -> landdeel -> stad (Land 1..1* landdeel 1..1* stad)
Land -> provincie -> stad (Land 1..1* provincie 1..1* stad)
Ah, maar dan hoeven we dus niet bij te houden welke landdelen / provincies bij elkaar horen? Dan zou ik gewoon een stad met landdeel & provincie gebruiken en die hele koppeltabel weglaten.
Dido schreef op donderdag 07 januari 2010 @ 12:41:
Een land heeft 1 of meerdere provincies check
Een land heeft 1 of meerdere landdelen check
Een land heeft 1 of meerdere steden check
Een provincie behoord tot 1 of meerdere landdelen check
Een Provincie heeft 1 of meerdere steden check
Een landdeel heeft 1 of meerdere provincies check
Een stad behoord tot 1 provincie check
Een stad behoord tot 1 landdeel check
Een stad behoord tot 1 land check

volgens mij heb ik ze allemaal?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
                +---------------+
                | land          |
                +---------------+
                | id            |
                | naam          |
                +------+--------+
                       |1
       +---------------+---------------+
       |n                              |n
+------#--------+              +-------#-------+
| landdeel      |              | provincie     |
+---------------+              +---------------+
| id            |              | id            |
| land.id       |              | land.id       |
| naam          |              | naam          |
+------+--------+              +-------+-------+
      1|                               |1
       +----------------+--------------+   
                       n|n
                +-------#-------+
                | landdeel-     |
                | provincie     |
                +---------------+
                | id            |
                | landdeel.id   |
                | provincie.id  |
                +-------+-------+
                        |1   
                        | 
                        |n
                +-------#-------+
                | stad          |
                +---------------+
                | id            |
                | ld/pr.id      |
                | naam          |
                +---------------+
Niet helemaal :p
Potentieel kun je een landdeel & provincie uit verschillende landen koppelen, waardoor een stad ineens in 2 landen ligt :>

Maar ik denk ook dat dit het verste is wat je kunt komen met een ERD. De rest moet in je business logica (db triggers / applicatie).

offtopic:
flexe tekening trouwens. Heb je een tooltje die dat zo in tekst output?

[ Voor 65% gewijzigd door J2pc op 07-01-2010 12:46 ]

"The computer is incredibly fast, accurate, and stupid. Man is unbelievably slow, inaccurate, and brilliant. The marriage of the two is a challenge and opportunity beyond imagination." © Stuart G. Walesh


Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 12:53

Dido

heforshe

Zie m'n edit, ik was er ook achter. Maar ik vraag me inderdaad af of dat zonder een (overigens simpele) databse rule op te lossen is.
J2pc schreef op donderdag 07 januari 2010 @ 12:41:
offtopic:
flexe tekening trouwens. Heb je een tooltje die dat zo in tekst output?
Dat heet Notepad 8)

[ Voor 46% gewijzigd door Dido op 07-01-2010 12:47 ]

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dido schreef op donderdag 07 januari 2010 @ 12:41:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
                +---------------+
                | land          |
                +---------------+
                | id            |
                | naam          |
                +------+--------+
                       |1
       +---------------+---------------+
       |n                              |n
+------#--------+              +-------#-------+
| landdeel      |              | provincie     |
+---------------+              +---------------+
| id            |              | id            |
| land.id       |              | land.id       |
| naam          |              | naam          |
+------+--------+              +-------+-------+
      1|                               |1
       +----------------+--------------+   
                       n|n
                +-------#-------+
                | landdeel-     |
                | provincie     |
                +---------------+
                | id            |
                | landdeel.id   |
                | provincie.id  |
                +-------+-------+
                        |1   
                        | 
                        |n
                +-------#-------+
                | stad          |
                +---------------+
                | id            |
                | ld/pr.id      |
                | naam          |
                +---------------+

edit: behalve dus dat inderdaad een provincie van land A bij een laddeel van land B kan komen.
Heb besloten voor deze oplossing te gaan en een extra check contraint (die controlleerd of de landen gelijk zijn) toe te voegen de landdeel-provincie tabel.

Acties:
  • 0 Henk 'm!

  • rickjehh
  • Registratie: Februari 2008
  • Laatst online: 15-09 16:55
De tabel landdeel-provincie hoeft toch geen id veld te krijgen? Je kunt de primary key toch op de combinatie van landdeel en provincie zetten? Anders kan een landdeel twee keer dezelfde provincie bevatten.

edit..oh, zie dat de laatste reactie al redelijk lang geleden is :p

[ Voor 14% gewijzigd door rickjehh op 12-01-2010 21:58 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
rickjehh schreef op dinsdag 12 januari 2010 @ 21:57:
De tabel landdeel-provincie hoeft toch geen id veld te krijgen? Je kunt de primary key toch op de combinatie van landdeel en provincie zetten? Anders kan een landdeel twee keer dezelfde provincie bevatten.

edit..oh, zie dat de laatste reactie al redelijk lang geleden is :p
Meestal is het geen goed idee om een PK enige betekenis (buiten het identificeren van het record) te laten hebben. Het kan immers voorkomen dat de provincienaam veranderd. Dan zul je ook overal de waardes van de FK's aan moeten passen. In principe wil je een PK nooit wijzigen.

Als je wil dat er niet meerdere keren dezelfde naam voor een provincie voorkomt, kun je dat IMHO beter oplossen met een simpele unique constraint over landid/naam

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1