Mogelijkheid combineren relaties
Ik vroeg me af op het mogelijk is een combinatie te maken met meerdere tabellen op 1 andere tabel
Even wat meer duidelijkheid met een voorbeeld
3 tabellen met producten bevatten Name, Description en Price
1 tabel met invoices_products is een verzameling van producten en die moet een relatie hebben met alle 3 de tabellen
mijn opzet
invoices_products
id
invoice_id
name
discription
price
nou moet de name, discription en price uit een van deze 3 tabellen gehaald worden alleen krijg ik hier mee error's wat eigenlijk ook logisch is omdat "Product A" niet vergeleken kan worden met "Product B" uit een andere categorie.
Nu dacht ik als oplossing een "enum" toe te voegen met de 3 selecties van de 3 tabellen.
en wanneer die op "categorie A" staat hij ook echt alleen naar die tabel kijkt.
Maar ik weet niet of dit een mogelijkheid is of dat ik overdrijf en het veel simpeler op te lossen valt
Alvast bedankt
Met vriendelijke groet,
Stefan Fransen
Zo kunnen we er weinig mee.
Ik denk dat het ook wel handig is wanneer je even aangeeft uit welke velden je tabellen zijn opgebouwd.
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
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
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for client_invoice_products
-- ----------------------------
DROP TABLE IF EXISTS `client_invoice_products`;
CREATE TABLE `client_invoice_products` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`invoice_id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`description` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`price` decimal(10,0) NOT NULL,
`type` enum('service','hosting','website') COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `invoice_id` (`invoice_id`),
KEY `name` (`name`,`description`,`price`),
CONSTRAINT `client_invoice_products_ibfk_1` FOREIGN KEY (`invoice_id`) REFERENCES `client_invoices` (`id`),
CONSTRAINT `client_invoice_products_ibfk_2` FOREIGN KEY (`name`, `description`, `price`) REFERENCES `cms_products_hosting` (`name`, `description`, `price`),
CONSTRAINT `client_invoice_products_ibfk_3` FOREIGN KEY (`name`, `description`, `price`) REFERENCES `cms_products_service` (`name`, `description`, `price`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Table structure for cms_products_hosting
-- ----------------------------
DROP TABLE IF EXISTS `cms_products_hosting`;
CREATE TABLE `cms_products_hosting` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`price` decimal(11,2) DEFAULT NULL,
`bandwidth` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`storage` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`domains` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`subdomains` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`databases` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`setup` varchar(11) COLLATE utf8_unicode_ci NOT NULL DEFAULT '10.00',
`popular` enum('1','0') COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `name` (`name`),
KEY `price` (`price`),
KEY `description` (`description`) USING BTREE,
KEY `name_2` (`name`,`description`,`price`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Table structure for cms_products_service
-- ----------------------------
DROP TABLE IF EXISTS `cms_products_service`;
CREATE TABLE `cms_products_service` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`price` decimal(11,2) DEFAULT NULL,
`bandwidth` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`storage` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`domains` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`subdomains` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`databases` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`setup` varchar(11) COLLATE utf8_unicode_ci NOT NULL DEFAULT '10.00',
`popular` enum('1','0') COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
`discount` int(2) DEFAULT NULL,
`support` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`maintenance` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`free_domain` enum('1','0','?') COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`),
KEY `price` (`price`),
KEY `description` (`description`) USING BTREE,
KEY `name_2` (`name`,`description`,`price`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Table structure for client_invoice_products
-- ----------------------------
DROP TABLE IF EXISTS `client_invoice_products`;
CREATE TABLE `client_invoice_products` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`invoice_id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`description` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`price` decimal(10,0) NOT NULL,
`type` enum('service','hosting','website') COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `invoice_id` (`invoice_id`),
KEY `name` (`name`,`description`,`price`),
CONSTRAINT `client_invoice_products_ibfk_1` FOREIGN KEY (`invoice_id`) REFERENCES `client_invoices` (`id`),
CONSTRAINT `client_invoice_products_ibfk_2` FOREIGN KEY (`name`, `description`, `price`) REFERENCES `cms_products_hosting` (`name`, `description`, `price`),
CONSTRAINT `client_invoice_products_ibfk_3` FOREIGN KEY (`name`, `description`, `price`) REFERENCES `cms_products_service` (`name`, `description`, `price`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Table structure for cms_products_hosting
-- ----------------------------
DROP TABLE IF EXISTS `cms_products_hosting`;
CREATE TABLE `cms_products_hosting` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`price` decimal(11,2) DEFAULT NULL,
`bandwidth` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`storage` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`domains` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`subdomains` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`databases` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`setup` varchar(11) COLLATE utf8_unicode_ci NOT NULL DEFAULT '10.00',
`popular` enum('1','0') COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `name` (`name`),
KEY `price` (`price`),
KEY `description` (`description`) USING BTREE,
KEY `name_2` (`name`,`description`,`price`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Table structure for cms_products_service
-- ----------------------------
DROP TABLE IF EXISTS `cms_products_service`;
CREATE TABLE `cms_products_service` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`price` decimal(11,2) DEFAULT NULL,
`bandwidth` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`storage` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`domains` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`subdomains` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`databases` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`setup` varchar(11) COLLATE utf8_unicode_ci NOT NULL DEFAULT '10.00',
`popular` enum('1','0') COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
`discount` int(2) DEFAULT NULL,
`support` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`maintenance` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`free_domain` enum('1','0','?') COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`),
KEY `price` (`price`),
KEY `description` (`description`) USING BTREE,
KEY `name_2` (`name`,`description`,`price`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Ik zie in je eerste bericht volgens mij een lijstje met 6 tabellen, je hebt het over 3 tabellen, je laat de opbouw zien van 3 tabellen, het is totaal onduidelijk welke relaties er zijn of zouden moeten zijn en ik zie ook nog steeds geen code waarnaar we kunnen kijken om te zien wat er mis gaat.
Ik vind het ook vreemd dat er 3 tabellen met producten zijn, waarom kunnen niet alle producten in één tabel volgens jou ?
Reden voor 3 tabellen is omdat er soiso 1 variabel is en de overige 2 statisch dus kan van 2 tabellen 1 maken maar dan zit ik alsnog met 2 tabellen en het zelfde probleem
Als ik 1 nieuw invoice_products aanmaak met bijvoorbeeld een hosting dan zegt hij dat hij niet overeen komt met de tabel service en als ik een service aanmaak zegt hij dat ie niet overeenkomt met hosting nu wil ik dat opgelost hebben maar dit moet wel een foreign key blijven