Autor | Zpráva | ||
---|---|---|---|
mr00101 Profil * |
#1 · Zasláno: 25. 7. 2012, 19:24:53
Ahoj vsem,
mam dotaz, uvedu na prikladu. Kazde kolo je dodavano v nekolika variantach, Kazda varianta ma jinou cenu. Varianty ovlivnuji cenu jsou napriklad velikost ramu, barva. Jak by meli zjednodusene takove tabulky vypadat a jake mezi nimi dat vazby aby to bylo spravne udelane? Zkousel jsem neco vycist z DB Prestashopu (maji tam Workbench schema) ale z tohoto moc moudry nejsem. Deluji za vsechny napady. |
||
Seki Profil |
#2 · Zasláno: 25. 7. 2012, 21:17:19
Já osobně bych to řešil pomocí dvou tabulek. V první tabulce by byl typ kola a jeho id a v druhé tabulce by byly uloženy všechny varianty a názvy slupců by byly dle vlastností (parametru) výrobku.
|
||
whoami Profil |
#3 · Zasláno: 27. 7. 2012, 03:25:06
Pokud je rozhodující i varianta kola i jeho barva tak bych to udělal takto..:
-- Adminer 3.4.0 MySQL dump SET NAMES utf8; SET foreign_key_checks = 0; SET time_zone = 'SYSTEM'; SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; DROP TABLE IF EXISTS `color`; CREATE TABLE `color` ( `id` int(255) NOT NULL AUTO_INCREMENT COMMENT '#', `name` varchar(255) COLLATE utf8_bin NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; INSERT INTO `color` (`id`, `name`) VALUES (1, 'Černá'), (2, 'Stříbrná'); DROP TABLE IF EXISTS `item`; CREATE TABLE `item` ( `id` int(255) NOT NULL AUTO_INCREMENT COMMENT '#', `name` varchar(255) COLLATE utf8_bin NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; INSERT INTO `item` (`id`, `name`) VALUES (1, 'DEZENT L si'); DROP TABLE IF EXISTS `item_price`; CREATE TABLE `item_price` ( `id` int(255) NOT NULL AUTO_INCREMENT, `item_id` int(255) NOT NULL, `type_id` int(255) NOT NULL, `color_id` int(255) NOT NULL, `price` double NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `item_id_type_id_color_id` (`item_id`,`type_id`,`color_id`), KEY `type_id` (`type_id`), KEY `color_id` (`color_id`), CONSTRAINT `item_price_ibfk_1` FOREIGN KEY (`item_id`) REFERENCES `item` (`id`) ON DELETE CASCADE, CONSTRAINT `item_price_ibfk_2` FOREIGN KEY (`type_id`) REFERENCES `type` (`id`) ON DELETE CASCADE, CONSTRAINT `item_price_ibfk_3` FOREIGN KEY (`color_id`) REFERENCES `color` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; INSERT INTO `item_price` (`id`, `item_id`, `type_id`, `color_id`, `price`) VALUES (1, 1, 1, 1, 1500), (2, 1, 1, 2, 1612.25), (3, 1, 2, 1, 12320), (4, 1, 2, 2, 2000); DROP TABLE IF EXISTS `type`; CREATE TABLE `type` ( `id` int(255) NOT NULL AUTO_INCREMENT COMMENT '#', `name` varchar(255) COLLATE utf8_bin NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; INSERT INTO `type` (`id`, `name`) VALUES (1, '15\"'), (2, '16\"'), (3, '17\"'); -- 2012-07-27 03:22:42 |
||
Ugo Profil |
takhle z hlavy ti strukturu jako kolega předemnou nedám, ovšem potřebuješ dost tabulek - minimálně 3 na parametry (product_params_values, params, params_values) aby sis moh definovat libovolné množství parametrů. Poté potřebuješ samotnou tabulku produktů, kterou já bych použil asi i jako tabulku variant (produkt s rodičem = varianta) s tím že bych duplicity oželel, případně chybějící věci řešil až v phpku (což je taky duplicita, ale menší :) ), dalo by ti to dost variability za minimální cenu. Jinak by to byla ještě tabulka: variants_params_values a product_variants, případně smazat parametry produktu a u každého mít variantu, tím by se duplicity asi odstranily úplně.
|
||
whoami Profil |
#5 · Zasláno: 27. 7. 2012, 14:05:24
Ugo:
Zdravim ugo.. samozdřejmě že sem to nenapsal z hlavy.. ale naklikal to v Admineru a pak exportoval..:-D |
||
Časová prodleva: 11 let
|
0