![]() |
[sql] несколько вопросов по реализации БД
Вопрос 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%D 0%B0%D1%86%D0%B8%D1%8F_%D0%91%D0%94 PS лучше самому догадаться, чтобы понять суть, чем другие подскажут ;) PPS http://www.sql-ex.ru - хороший сайт с упражнениями по sql (требуется регистрация) |
Так, я, видимо, неправильно выразился. Мне нужно придумать структуру БД на MySQL. Я просто не знаю, как такие вещи реализуются. Я могу написать по-кустарному, но хочется воспользоваться средствами самой БД, а не php. Уверен, такие средства есть.
|
так, тема актуальна
кто знает, как хранить в одной ячейке массив значений, чтобы легко работать было с ним: выбирать значения и редактировать средствами самого sql? |
Таблица "заказы"
PHP код:
PHP код:
Таблица "исполнители" PHP код:
PHP код:
PHP код:
Запрос выборки имени по id занятий: PHP код:
|
Chaak омфк))))
Neoveneficus предлагаю след. структуру. Рассмотрим на примере заказов и вероятных исполнителей. Будет 3 таблицы: 1) Заказы 2) Исполнители 3) Назовем ее к примеру Заказы_Исполнители (хотя название нормальное стоило бпридумать) У заказов и исполнителей есть id-шники и еще какая то инфа. А у таблицы Заказы_Исполнители будет след. структура: id_заказа id_исполнителя ... (здесь можно вставить еще какую-либо вспомогательную инфу, если она необходима). Первичный ключ в данной таблице будет составной, а именно id_заказа + id_исполнителя В свою очередь эти пля ссылаются на те таблички (заказы и исполнители... для поддержания целостности БД). И вот через эту табличку легко реализуется целостность и нормальная работа. Допустим надо тебе получить всех птенциальных исполнителей - сджойнил таблички (ну либо просо выборку сварганил на основе коррелирующего пдзапроса) - и ходиш улыбаешся :) |
VDShark, кул, но:
Как сделать составной первичный ключ? Как сделать ссылки на другие таблицы? Как джойнить таблички? Что это значит? Что такое коррелирующий подзапрос? =) буду очень благодарен, если разжуешь =) |
Цитата:
1) Составной первичный ключ Код:
PRIMARY KEY (поле1, поле2)2) FOREIGN KEY ... REFERENCES Подробнее http://dev.mysql.com/doc/refman/5.0/...nstraints.html 3) Джойнить от слова JOIN - соединение... Подробнее про это ты можешь почитать в моей статье sql. Явные операции соединения. Как готовить и с чем есть. 4) Что такое коррелирующий подзапрос тоже не буду расписывать... Это достаточно хорошо расписано в дружественном для sql-ex проекте sqlbooks :) Коррелирующие подзапросы |
| Время: 01:06 |