Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
[sql] несколько вопросов по реализации БД |

20.03.2009, 14:14
|
|
Reservists Of Antichat - Level 6
Регистрация: 10.04.2008
Сообщений: 299
Провел на форуме: 1199829
Репутация:
405
|
|
[sql] несколько вопросов по реализации БД
Вопрос 1
Есть таблица "ЗАКАЗЫ", есть в ней поле, в котором должны храниться id вероятных исполнителей. Их много и они уникальны.
Как организовать хранение так, чтобы можно было легко проверить, есть ли данный id исполнителя в текущей записи?
Вопрос 2
Есть таблица "ИСПОЛНИТЕЛИ", в ней есть поле "дисциплины". Один "исполнитель" может иметь несколько дисциплин. В поле "дисциплины" будут храниться несколько уникальных id дисциплин из таблицы "ДИСЦИПЛИНЫ".
Как организовать хранение, чтобы было легко делать выборку из таблицы "ИСПОЛНИТЕЛИ" по одному значению id дисциплины.
__________________
II venēficus, ī m.
(с лат.) волшебник, чародей
Последний раз редактировалось Neoveneficus; 20.03.2009 в 14:18..
|
|
|

20.03.2009, 14:46
|
|
Super Moderator
Регистрация: 08.11.2004
Сообщений: 3,395
Провел на форуме: 13166814
Репутация:
3876
|
|
хм.. попробуй на листочке нарисовать эти таблицы с атрибутами (полями).
Проставь связь между таблиц (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 (требуется регистрация)
Последний раз редактировалось Rebz; 20.03.2009 в 15:01..
|
|
|

20.03.2009, 14:51
|
|
Reservists Of Antichat - Level 6
Регистрация: 10.04.2008
Сообщений: 299
Провел на форуме: 1199829
Репутация:
405
|
|
Так, я, видимо, неправильно выразился. Мне нужно придумать структуру БД на MySQL. Я просто не знаю, как такие вещи реализуются. Я могу написать по-кустарному, но хочется воспользоваться средствами самой БД, а не php. Уверен, такие средства есть.
__________________
II venēficus, ī m.
(с лат.) волшебник, чародей
|
|
|

20.03.2009, 15:36
|
|
Reservists Of Antichat - Level 6
Регистрация: 10.04.2008
Сообщений: 299
Провел на форуме: 1199829
Репутация:
405
|
|
так, тема актуальна
кто знает, как хранить в одной ячейке массив значений, чтобы легко работать было с ним:
выбирать значения и редактировать средствами самого sql?
__________________
II venēficus, ī m.
(с лат.) волшебник, чародей
|
|
|

20.03.2009, 15:47
|
|
Познавший АНТИЧАТ
Регистрация: 01.06.2008
Сообщений: 1,047
Провел на форуме: 5321514
Репутация:
3313
|
|
Таблица "заказы"
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; 20.03.2009 в 15:50..
|
|
|

21.03.2009, 11:20
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
Chaak омфк))))
Neoveneficus предлагаю след. структуру.
Рассмотрим на примере заказов и вероятных исполнителей.
Будет 3 таблицы:
1) Заказы
2) Исполнители
3) Назовем ее к примеру Заказы_Исполнители (хотя название нормальное стоило бпридумать)
У заказов и исполнителей есть id-шники и еще какая то инфа.
А у таблицы Заказы_Исполнители будет след. структура:
id_заказа
id_исполнителя
... (здесь можно вставить еще какую-либо вспомогательную инфу, если она необходима).
Первичный ключ в данной таблице будет составной, а именно
id_заказа + id_исполнителя
В свою очередь эти пля ссылаются на те таблички (заказы и исполнители... для поддержания целостности БД).
И вот через эту табличку легко реализуется целостность и нормальная работа.
Допустим надо тебе получить всех птенциальных исполнителей - сджойнил таблички (ну либо просо выборку сварганил на основе коррелирующего пдзапроса) - и ходиш улыбаешся 
|
|
|

21.03.2009, 12:50
|
|
Reservists Of Antichat - Level 6
Регистрация: 10.04.2008
Сообщений: 299
Провел на форуме: 1199829
Репутация:
405
|
|
VDShark, кул, но:
Как сделать составной первичный ключ?
Как сделать ссылки на другие таблицы?
Как джойнить таблички? Что это значит?
Что такое коррелирующий подзапрос?
=) буду очень благодарен, если разжуешь =)
__________________
II venēficus, ī m.
(с лат.) волшебник, чародей
|
|
|

21.03.2009, 13:19
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
Сообщение от Neoveneficus
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
Коррелирующие подзапросы
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|