Autor Zpráva
mr00101
Profil *
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
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
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
Ugo:
Zdravim ugo.. samozdřejmě že sem to nenapsal z hlavy.. ale naklikal to v Admineru a pak exportoval..:-D

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: