Hoe kan ik het beste entiteiten met elkaar verbinden?
Ik heb een opdracht van school gehad van het opzetten van en database voor een makelaar. Ik moet programma schrijven die gegevens op haalt en uitwisselt met de database.
De voorwaarden zijn:
• Gegevens over klanten, die huis te koop zetten
• Gegeven over klanten die een zoekopdracht hebben gegeven
• Gegevens over het woning aanbod van verschillende makelaars
• Gegevens van het woningaanbod van de makelaar zelf.
Mijn probleem is dat ik niet weet hoe ik de entiteiten op een goede manier met elkaar kan verbinden. Ik weet dat het moet met primaire en foreign keys, maar ik weet niet hoe ze op een goede manier met elkaar verbind. Ik weet dat ik minimaal 4 entiteiten heb: klant, woningen, verkochte/verhuurde woningen, makelaars.
Hoe verbind ik de entiteiten zonder redundante gegevens te krijgen?
Bedankt voor uw tijd
Met vriendelijke groet,
Bert.
Zoekopdracht = zoekopdracht_id + klant_id + zoekterm
Alle zoekopdrachten van "Eddy" -->
SELECT z.zoektermen
FROM zoekopdrachten AS z
JOIN LEFT klanten AS k
ON z.klant_id = k.klant_id
WHERE k.naam = "Eddy"
Verkochte en/of verhuurde woningen zijn ook woningen toch. Hiervoor hoef je geen extra entity aan te maken. een Kolom in de tabel met een naam als "Status" is hiervoor voldoende.
Ik kan je vraag op twee manieren opvatten. Op PHP niveau of op Database niveau?
Eddy heeft je al een voorzet gegeven voor de database. Je kunt je database nog wel voorzien van wat beperkingen zoals dat een klant niet verwijderd mag worden als er nog woningen aan gekoppeld zitten etc..
In PHP kan de entity Klant een array met Woningen krijgen, een array van Woning objects dus.
Code (php)
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php
class Client
{
/**
* @var int
*/
private $id;
/**
* @var string
*/
private $name;
// more properties ...
/**
* @var array
*/
private $houses;
public function __construct()
{
$this->houses = [];
}
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Client
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Add house
*
* @param $house
*
* @return Client
*/
public function addHouse($house)
{
$this->houses[] = $house;
return $this;
}
/**
* Remove house
*
* @param $house
*/
public function removeHouse($house)
{
// find the house and remove it out of the array $this->houses
}
/**
* Get houses
*
* @return array
*/
public function getHouses()
{
return $this->houses;
}
}
?>
class Client
{
/**
* @var int
*/
private $id;
/**
* @var string
*/
private $name;
// more properties ...
/**
* @var array
*/
private $houses;
public function __construct()
{
$this->houses = [];
}
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Client
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Add house
*
* @param $house
*
* @return Client
*/
public function addHouse($house)
{
$this->houses[] = $house;
return $this;
}
/**
* Remove house
*
* @param $house
*/
public function removeHouse($house)
{
// find the house and remove it out of the array $this->houses
}
/**
* Get houses
*
* @return array
*/
public function getHouses()
{
return $this->houses;
}
}
?>
Toevoeging op 27/04/2017 18:53:57:
p.s. Ik weet niet of je third party extensies mag gebruiken? In dat geval zou je kunnen overwegen om Doctrine ORM te gebruiken.