Вопрос 1 Есть таблица "ЗАКАЗЫ", есть в ней поле, в котором должны храниться id вероятных исполнителей. Их много и они уникальны. Как организовать хранение так, чтобы можно было легко проверить, есть ли данный id исполнителя в текущей записи? Вопрос 2 Есть таблица "ИСПОЛНИТЕЛИ", в ней есть поле "дисциплины". Один "исполнитель" может иметь несколько дисциплин. В поле "дисциплины" будут храниться несколько уникальных id дисциплин из таблицы "ДИСЦИПЛИНЫ". Как организовать хранение, чтобы было легко делать выборку из таблицы "ИСПОЛНИТЕЛИ" по одному значению id дисциплины.
хм.. попробуй на листочке нарисовать эти таблицы с атрибутами (полями). Проставь связь между таблиц (1:1, 1:N, N:M). Там где N:M (многие ко многим) - можно создать доп.табличку для слияния 2-х таблиц. Почитай про нормальные формы БД http://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%91%D0%94 PS лучше самому догадаться, чтобы понять суть, чем другие подскажут PPS http://www.sql-ex.ru - хороший сайт с упражнениями по sql (требуется регистрация)
Так, я, видимо, неправильно выразился. Мне нужно придумать структуру БД на MySQL. Я просто не знаю, как такие вещи реализуются. Я могу написать по-кустарному, но хочется воспользоваться средствами самой БД, а не php. Уверен, такие средства есть.
так, тема актуальна кто знает, как хранить в одной ячейке массив значений, чтобы легко работать было с ним: выбирать значения и редактировать средствами самого sql?
Таблица "заказы" PHP: CREATE TABLE `orders` ( `dev_id` INT NOT NULL , UNIQUE ( `dev_id` ) ) ENGINE = InnoDB Проверка будет осуществлятся: PHP: SELECT dev_id FROM orders WHERE dev_id='1' LIMIT 1 ------------------------------------------- Таблица "исполнители" PHP: CREATE TABLE `devs` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` VARCHAR( 30 ) NOT NULL , `jobs` VARCHAR( 700 ) NOT NULL ) ENGINE = InnoDB Записи для теста: PHP: INSERT INTO `devs` ( `id` , `name` , `jobs` ) VALUES ( NULL , 'Chaak', '<jobs><job id=''1'' /><job id=''2'' /></jobs>' ); INSERT INTO `devs` ( `id` , `name` , `jobs` ) VALUES ( NULL , 'Neoveneficus', '<jobs><job id=''1'' /><job id=''3'' /></jobs>' ); Вот так оно выглядит: PHP: id name jobs 1 Chaak <jobs><job id='1' /><job id='2' /></jobs> 2 Neoveneficus <jobs><job id='1' /><job id='3' /></jobs> Запрос выборки имени по id занятий: PHP: SELECT name FROM devs WHERE jobs LIKE '%<job id=\'1\' />%' LIMIT 0 , 30 <job id=\'1\' /> - еденичка это id занятий исполнителя
Chaak омфк)))) Neoveneficus предлагаю след. структуру. Рассмотрим на примере заказов и вероятных исполнителей. Будет 3 таблицы: 1) Заказы 2) Исполнители 3) Назовем ее к примеру Заказы_Исполнители (хотя название нормальное стоило бпридумать) У заказов и исполнителей есть id-шники и еще какая то инфа. А у таблицы Заказы_Исполнители будет след. структура: id_заказа id_исполнителя ... (здесь можно вставить еще какую-либо вспомогательную инфу, если она необходима). Первичный ключ в данной таблице будет составной, а именно id_заказа + id_исполнителя В свою очередь эти пля ссылаются на те таблички (заказы и исполнители... для поддержания целостности БД). И вот через эту табличку легко реализуется целостность и нормальная работа. Допустим надо тебе получить всех птенциальных исполнителей - сджойнил таблички (ну либо просо выборку сварганил на основе коррелирующего пдзапроса) - и ходиш улыбаешся
VDShark, кул, но: Как сделать составной первичный ключ? Как сделать ссылки на другие таблицы? Как джойнить таблички? Что это значит? Что такое коррелирующий подзапрос? =) буду очень благодарен, если разжуешь =)
Всюинфу можно легко найти Но распишу 1) Составной первичный ключ Code: PRIMARY KEY (поле1, поле2) 2) FOREIGN KEY ... REFERENCES Подробнее http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html 3) Джойнить от слова JOIN - соединение... Подробнее про это ты можешь почитать в моей статье sql. Явные операции соединения. Как готовить и с чем есть. 4) Что такое коррелирующий подзапрос тоже не буду расписывать... Это достаточно хорошо расписано в дружественном для sql-ex проекте sqlbooks Коррелирующие подзапросы