ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

[sql] несколько вопросов по реализации БД
  #1  
Старый 20.03.2009, 14:14
Аватар для Neoveneficus
Neoveneficus
Reservists Of Antichat - Level 6
Регистрация: 10.04.2008
Сообщений: 299
Провел на форуме:
1199829

Репутация: 405
Отправить сообщение для Neoveneficus с помощью ICQ
По умолчанию [sql] несколько вопросов по реализации БД

Вопрос 1
Есть таблица "ЗАКАЗЫ", есть в ней поле, в котором должны храниться id вероятных исполнителей. Их много и они уникальны.

Как организовать хранение так, чтобы можно было легко проверить, есть ли данный id исполнителя в текущей записи?

Вопрос 2
Есть таблица "ИСПОЛНИТЕЛИ", в ней есть поле "дисциплины". Один "исполнитель" может иметь несколько дисциплин. В поле "дисциплины" будут храниться несколько уникальных id дисциплин из таблицы "ДИСЦИПЛИНЫ".

Как организовать хранение, чтобы было легко делать выборку из таблицы "ИСПОЛНИТЕЛИ" по одному значению id дисциплины.
__________________
II venēficus, ī m.
(с лат.) волшебник, чародей

Последний раз редактировалось Neoveneficus; 20.03.2009 в 14:18..
 
Ответить с цитированием

  #2  
Старый 20.03.2009, 14:46
Аватар для Rebz
Rebz
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..
 
Ответить с цитированием

  #3  
Старый 20.03.2009, 14:51
Аватар для Neoveneficus
Neoveneficus
Reservists Of Antichat - Level 6
Регистрация: 10.04.2008
Сообщений: 299
Провел на форуме:
1199829

Репутация: 405
Отправить сообщение для Neoveneficus с помощью ICQ
По умолчанию

Так, я, видимо, неправильно выразился. Мне нужно придумать структуру БД на MySQL. Я просто не знаю, как такие вещи реализуются. Я могу написать по-кустарному, но хочется воспользоваться средствами самой БД, а не php. Уверен, такие средства есть.
__________________
II venēficus, ī m.
(с лат.) волшебник, чародей
 
Ответить с цитированием

  #4  
Старый 20.03.2009, 15:36
Аватар для Neoveneficus
Neoveneficus
Reservists Of Antichat - Level 6
Регистрация: 10.04.2008
Сообщений: 299
Провел на форуме:
1199829

Репутация: 405
Отправить сообщение для Neoveneficus с помощью ICQ
По умолчанию

так, тема актуальна
кто знает, как хранить в одной ячейке массив значений, чтобы легко работать было с ним:
выбирать значения и редактировать средствами самого sql?
__________________
II venēficus, ī m.
(с лат.) волшебник, чародей
 
Ответить с цитированием

  #5  
Старый 20.03.2009, 15:47
Аватар для Chaak
Chaak
Познавший АНТИЧАТ
Регистрация: 01.06.2008
Сообщений: 1,047
Провел на форуме:
5321514

Репутация: 3313


Отправить сообщение для Chaak с помощью ICQ
По умолчанию

Таблица "заказы"
PHP код:
CREATE TABLE `orders` (
`
dev_idINT NOT NULL ,
UNIQUE (
`
dev_id
)
ENGINE InnoDB 
Проверка будет осуществлятся:
PHP код:
SELECT dev_id
FROM orders
WHERE 
   dev_id
='1'
LIMIT 1 
-------------------------------------------

Таблица "исполнители"
PHP код:
CREATE TABLE `devs` (
`
idINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`
nameVARCHAR30 NOT NULL ,
`
jobsVARCHAR700 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..
 
Ответить с цитированием

  #6  
Старый 21.03.2009, 11:20
Аватар для VDShark
VDShark
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме:
804931

Репутация: 526
По умолчанию

Chaak омфк))))
Neoveneficus предлагаю след. структуру.
Рассмотрим на примере заказов и вероятных исполнителей.
Будет 3 таблицы:

1) Заказы
2) Исполнители
3) Назовем ее к примеру Заказы_Исполнители (хотя название нормальное стоило бпридумать)


У заказов и исполнителей есть id-шники и еще какая то инфа.
А у таблицы Заказы_Исполнители будет след. структура:

id_заказа
id_исполнителя
... (здесь можно вставить еще какую-либо вспомогательную инфу, если она необходима).


Первичный ключ в данной таблице будет составной, а именно
id_заказа + id_исполнителя
В свою очередь эти пля ссылаются на те таблички (заказы и исполнители... для поддержания целостности БД).

И вот через эту табличку легко реализуется целостность и нормальная работа.
Допустим надо тебе получить всех птенциальных исполнителей - сджойнил таблички (ну либо просо выборку сварганил на основе коррелирующего пдзапроса) - и ходиш улыбаешся
 
Ответить с цитированием

  #7  
Старый 21.03.2009, 12:50
Аватар для Neoveneficus
Neoveneficus
Reservists Of Antichat - Level 6
Регистрация: 10.04.2008
Сообщений: 299
Провел на форуме:
1199829

Репутация: 405
Отправить сообщение для Neoveneficus с помощью ICQ
По умолчанию

VDShark, кул, но:
Как сделать составной первичный ключ?
Как сделать ссылки на другие таблицы?
Как джойнить таблички? Что это значит?
Что такое коррелирующий подзапрос?

=) буду очень благодарен, если разжуешь =)
__________________
II venēficus, ī m.
(с лат.) волшебник, чародей
 
Ответить с цитированием

  #8  
Старый 21.03.2009, 13:19
Аватар для VDShark
VDShark
Участник форума
Регистрация: 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
Коррелирующие подзапросы
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
несколько вопросов про ДеДиКоВ B1t.exe Безопасность 14 26.02.2009 20:36
Несколько вопросов freddi Болталка 12 27.11.2006 14:29
MSSQL inj несколько вопросов a_k50 PHP, PERL, MySQL, JavaScript 1 25.03.2006 03:56
linux - несколько вопросов.... xSp1D3R *nix 14 29.06.2005 16:09
Несколько вопросов по форуму phpBB 2.0.11 limbonic Форумы 29 05.04.2005 13:06



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ