Практика
Нужно создать таблицу MYSQL скидок для каждого клиента на свою группу товаров своя скидка
уже существует таблица с клиентами и табл с группами товаров
CREATE TABLE IF NOT EXISTS `goup_product` ( `id` int(11) NOT NULL AUTO_INCREMENT, `group_name` varchar(255) NOT NULL, `block` int(11) NOT NULL DEFAULT '0', `vid` int(11) NOT NULL DEFAULT '0', `autor_name` varchar(60) NOT NULL DEFAULT ' ', `autor_id` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) TYPE = InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1
CREATE TABLE IF NOT EXISTS `client` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL DEFAULT ' ', `Tel` varchar(255) NOT NULL DEFAULT ' ', `fax` varchar(255) NOT NULL DEFAULT ' ', `Manager` varchar(255) NOT NULL DEFAULT ' ', `Email` varchar(100) NOT NULL DEFAULT ' ', `autor_id` int(11) NOT NULL DEFAULT '0', `region` varchar(255) NOT NULL DEFAULT ' ', `autor_name` varchar(255) NOT NULL DEFAULT ' ', `Status` int(11) NOT NULL DEFAULT '0', `Block` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) TYPE = InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
создаю связанную таблицу
CREATE TABLE IF NOT EXISTS `percentages` ( id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, client_id INT(11) NOT NULL, group_id INT(11) NOT NULL, PRIMARY KEY (id), INDEX client_id USING BTREE (client_id), INDEX group_id USING BTREE (group_id), CONSTRAINT orders_ibfk_1 FOREIGN KEY (client_id) REFERENCES db.client (id) ON UPDATE CASCADE, CONSTRAINT orders_ibfk_2 FOREIGN KEY (group_id) REFERENCES db.goup_product (id) ON DELETE CASCADE ) ENGINE = INNODB AUTO_INCREMENT = 1 AVG_ROW_LENGTH = 4096 CHARACTER SET cp1251 COLLATE cp1251_general_ci;
Я с базами данных знаком на очень среднем уровне. Нужно подумать. Нужно создать таблицу скидок для каждого клиента на свою группу товаров своя скидка.
Уже существует таблица с клиентами и табл с группами товаров, создаю связанную таблицу `percentages`, но как ее заполнить ?
Нужно на каждого клиента по ID все группы товаров с ID в таблицу всунуть.
Возможно ли это в табл `percentages` с такой структурой сделать?
Ответ - Смотри... есть клиенты, есть товары. У каждого клиента своя скидка на отдельный товар?
Вопрос - Да на отдельную группу товаров и у всех разные скидки и у клиентов и на группы товаров и количество групп произвольное.
Как правильно таблицу со скидками сделать?
Ответ - нужно проектировать это не делается просто так..... Дай мне структуру таблиц по столбцам как они записаны, то есть название столбцов в таблицах
я пока отойду ненадолго, скоро вернусь. ты пока выпиши.
CONSTRAINT orders_ibfk_1 FOREIGN KEY (client_id) REFERENCES db.client (id) ON UPDATE CASCADE, CONSTRAINT orders_ibfk_2 FOREIGN KEY (group_id) REFERENCES db.goup_product (id) ON DELETE CASCADE
это связывает уже существующие записи при удалении или изменении но как их создать??? в новой третьей таблице со скидками
ща дам схематично структуру таблиц- а полностью я их вверху написал
CREATE TABLE IF NOT EXISTS `client` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL DEFAULT ' ',................
CREATE TABLE IF NOT EXISTS `goup_product` ( `id` int(11) NOT NULL AUTO_INCREMENT, `group_name` varchar(255) NOT NULL,....................
а нужно
CREATE TABLE IF NOT EXISTS `percentages` ( id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, client_id INT(11) NOT NULL, group_id INT(11) NOT NULL, PRIMARY KEY (id), INDEX client_id USING BTREE (client_id), INDEX group_id USING BTREE (group_id), CONSTRAINT orders_ibfk_1 FOREIGN KEY (client_id) REFERENCES db.client (id) ON UPDATE CASCADE, CONSTRAINT orders_ibfk_2 FOREIGN KEY (group_id) REFERENCES db.goup_product (id) ON DELETE CASCADE ) ENGINE = INNODB AUTO_INCREMENT = 6 AVG_ROW_LENGTH = 4096 CHARACTER SET cp1251 COLLATE cp1251_general_ci;.............
Вопрос
правильно ли структура третьей табл со скидками спроектирована? и как ее заполнить с данными клиентов и групп? Как ты думаешь?
Ответ
во-первых Primary key не нужен. ты и так используешь составной PRIMARY KEY - это 3 айдишника клиент-группа-товар - чем не уникальный блин параметр?
то есть таблица со скидками будет без PRIMARY KEY?
объясни зачем там PRIMARY KEY?
Хорошо, пусть будет так, а как же заполнить ее - если две таблицы с клиентами и группами товаров уже есть? В цикле двойном - стремновато, всякими сложными условиями - не хочу.
Ответ Тебе полюбому нужно будет связать товар и клиента и выставить скидку... отношение многие ко многим - много товаров, много клиентов, нужно разбивать и делать (в идеале) отношение 1 к 1 - 1 товар 1 клиент 1 скидка ....
Полюбому нужно отталкиваться от того что у 1 клиента - скидки (РАЗНЫЕ) на каждый товар (или на группу товаров)
Вопрос Как это на практике сделать? или 1 клиент - 1 группа товаров - 1 скидка?
Ответ Какие у тебя столбцы (со значимыми названиями а не с твоими названиями? какие данные они содержат?)
по таблицам, а то я конечно читаю твой код но мне он мало о чем говорит. атрибуты мне не интересны. это стадия проектирования, а не реализации
заполнение таблиц в соответствии с типами полей. Короче, создавай вложенные циклы для создания таблицы скидок для уже существующих клиентов и групп товаров или придумай запрос.
Комментарии
Оставить комментарий
Базы данных - MySql (Maria DB)
Термины: Базы данных - MySql (Maria DB)