|
|
|
| Здравствуйте! Помогите решить следующую задачу.
У меня есть таблица с товарами. Каждый товар может иметь множество сфер применения
(напр. металлургия, медицина, строительство и пр.). Есть вторая таблица с перечнем сфер применения товаров, вида
id | name
-------------
1 медицина
2 промышленность
3 хозяйство
---------------------
|
Пользователь имеет возможность редактировать список сфер применения, а также "привязывать" товар к одной или нескольким сферам.
У меня загвоздка в том как реализовать динамическую связь? Ведь число сфер применения может меняться и создавать в табл. с товарами n-е количество полей нельзя.
Я пока нашел единственный выход -- записывать в таблицу с товарами несколько строк с разными
id сферы применения.
Например добавляем товар "Редуктор" котрый применяется в промышленности и строительстве и
заносим в таблицу с товарами 2 строки которые отличаются полем сферы применения.
Но ведь это не рациональное использование ресурса БД??? о_О | |
|
|
|
|
|
|
|
для: hammet
(28.04.2007 в 15:00)
| | А если сделать 3-ю таблицу для соответствий
Tovar_id | Sfera_Id
и пусть пользователь редачит её
а для вывода сделать представление
Вот и получится динамическая таблица | |
|
|
|
|
|
|
|
для: MIchail1982
(28.04.2007 в 15:36)
| | А смысл? Как это облегчит задачу? все равно придется заносить несколько строк
item_id - branche_id_1
item_id - branche_id_2
item_id - branche_id_3
.....
Ведь так?
+ придется связывать эти таблицы хитро..... | |
|
|
|
|
 653 байт |
|
|
для: hammet
(28.04.2007 в 15:56)
| | а для вывода сделать представление
при этом таблицы сами хитро свяжутся
Структура в аттаче | |
|
|
|
|
|
|
|
для: MIchail1982
(28.04.2007 в 16:04)
| | Хорошо! Допустим у нас есть 3 таблицы: товары, сферы применения, и вспомогательная item_id | branche_id
Товары:
item_id | item_name | branche
===========================
1 велосипеды (тут 10 сфер применения)
|
как и вписывать? в одно поле через запятую?? о_О
не вариант....
может я Вас не понял, поясните | |
|
|
|
|
|
|
|
для: hammet
(28.04.2007 в 16:10)
| | В аттач глянь | |
|
|
|
|
|
|
|
для: MIchail1982
(28.04.2007 в 16:16)
| | Первичный ключ к таблице связки всё же стоило бы добавить. Да и индексы расставить не помешало бы.
to hammet :
Эта связь - многие ко многим.
Разные товары к разным сферам. | |
|
|
|
|
|
|
|
для: Trianon
(28.04.2007 в 16:21)
| |
DROP DATABASE IF EXISTS `qwerty`;
CREATE DATABASE `qwerty` /*!40100 DEFAULT CHARACTER SET cp1251 */;
USE `qwerty`;
CREATE TABLE `Sfera` (
`Id` int(11) NOT NULL auto_increment,
`Name` tinytext NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
CREATE TABLE `Sootv` (
`Tovar` int(11) default NULL,
`Sfera` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
CREATE TABLE `Tovar` (
`Id` int(11) NOT NULL auto_increment,
`Name` tinytext NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `newview` AS select `tovar`.`Name` AS `Tovar`,`sfera`.`Name` AS `Sfera` from ((`tovar` join `sfera`) join `sootv`) where ((`sootv`.`Tovar` = `tovar`.`Id`) and (`sootv`.`Sfera` = `sfera`.`Id`));
|
Это агрегат? Я так и не понял как производить запись в таком случае??Я добавляю товар :
имя = велосипед
сфера = сфера1, сфера2, сфера3
Как мне записать в БД такие данные при этой конструкции? | |
|
|
|
|
|
|
|
для: hammet
(28.04.2007 в 16:51)
| |
Insert into tovar (Name) VALUES (велосипед);
Insert into Sootv (Tovar,Sfera) VALUES (1,1);
Insert into Sootv (Tovar,Sfera) VALUES (1,2);
Insert into Sootv (Tovar,Sfera) VALUES (1,3);
|
если велосипед имеет id=1 | |
|
|
|