Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2013, 21:48   #1
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
По умолчанию MySQL, связь многие-ко-многим. SQL запрос.

Добрый день. Пытаюсь создать БД лыжная база.
Обычные запросы составлять умею, а вот с более сложным возникли проблемы.
Я представляю это так.
1 таблица. Лыжи(id лыж, макра, модель, ростовка, кол-во сезонов, состояние.
Код:
CREATE TABLE	`liji` (

        `id_lij` integer NOT NULL AUTO_INCREMENT,
        `marka` CHAR(20) NOT NULL,
	`model` CHAR(20) NOT NULL,
        `rostovka` char(10) NOT NULL,
	`kol_sezonov` char(15) NOT NULL,
	`sostoyanie_lij` char(25) NOT NULL,
        PRIMARY KEY(`id_lij`));
2 таблица. Лыжники(клиенты)( id лыжник, Фамилия, Имя, Отчество, паспортные данные, телефон)
Код:
CREATE TABLE	`lijnik` (

        `id_lijnik` integer NOT NULL AUTO_INCREMENT,
        `Fam` CHAR(30) NOT NULL,
	`Ima` CHAR(20) NOT NULL,
        `Ot` char(15) NOT NULL,
	`Pasport_data` char(45) NOT NULL,
	`Telefon` char(10) NOT NULL,
        PRIMARY KEY(`id_lijnik`));

3 таблица. Я представлял так(но это не верно)
Код:
CREATE TABLE	`prokat` (

	`id_prokat` integer NOT NULL AUTO_INCREMENT,
	`id_lij` integer NOT NULL,
	`id_lijnik` integer NOT NULL,
	`data_arendi` DATETIME NOT NULL,
	`stoimost` integer NOT NULL,
	PRIMARY KEY(`id_prokat`)
	);
В таблице Прокат(по моему мнению) должно быть (Интентарный номер(id лыж), Фам, Имя, От, Дата\время выдачи, на сколько выданы и стоимость.)
Как это реализовать я не понимаю. В 3 таблице нужно установить связь много-ко-многим. Далее сделать запрос на вывод таблицы прокат.
Т.е. если я выдал лыжи №1 Иванову в 13:00 на 2часа, то Петрову я эти же лыжи смогу выдать только в 15:00.
Я курил форумы нашел, что нужно использовать тригеры, как их использовать для составления запроса не имею представления.
Буду рад любому ответу. Если можно, отвечать навернуто.
Спасибо.
PROkaZZZniK вне форума Ответить с цитированием
Старый 02.06.2013, 22:17   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Ну так вы и сделали связь м-2-м.
eval вне форума Ответить с цитированием
Старый 02.06.2013, 22:28   #3
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
Ну так вы и сделали связь м-2-м.
я просто продублировал название полей. И это типо создается связь? Я видел что то с join связанное. А про запрос ничего сказать не можете?
PROkaZZZniK вне форума Ответить с цитированием
Старый 03.06.2013, 13:05   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
я просто продублировал название полей
На основе их сделай внешние ключи FOREIGN KEY. На счет запросов - какие такие сложные?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.06.2013, 13:32   #5
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
На основе их сделай внешние ключи FOREIGN KEY. На счет запросов - какие такие сложные?
Спасибо за отклик.

В начале делал как раз через FOREIGN KEY потом решил отказаться от этого, мешало при редактировании таблиц, а дальше уже подумал что ни к чему это, возможно был не прав.

Сделал так. Будет выводить id_прокат, id_лыж, id_лыжник, дата_аренды и на сколько часов было выдано. Стоимость проката будет зависеть от количества часов. 1 час=100р.
Код:
CREATE TABLE	`prokat` (

	`id_prokat` integer NOT NULL AUTO_INCREMENT,
	`id_lij` integer NOT NULL,
	`id_lijnik` integer NOT NULL,
	`data_arendi` DATETIME NOT NULL,
	`kol_Casov` integer NOT NULL,
	PRIMARY KEY(`id_prokat`)
	);
Стоимость расчитыываться будет так: WHERE stoimost=kol_Casov*100;
А в самом клиенте, который я создаю решил написать запрос для вывода таблицы прокат.

Мне нужно что бы 3 таблица выводило вот такие данные
Цитата:
В таблице(по моему мнению) должно быть (Интентарный номер(id лыж), Фам, Имя, От, Дата\время выдачи, на сколько выданы и стоимость.) Как это реализовать я не понимаю, т.е. если я выдал лыжи №1 Иванову в 13:00 на 2часа, то Петрову я эти же лыжи смогу выдать только в 15:00.
Спасибо.
Буду рад любому ответу. Если можно, отвечать навернуто.
PROkaZZZniK вне форума Ответить с цитированием
Старый 03.06.2013, 13:35   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
вот такие данные
нишиша не понятно
чего в задаче спрашивают?
eval вне форума Ответить с цитированием
Старый 03.06.2013, 13:52   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Примерно так, условие выборки сам додумывай. Фиксированная цена за час хреново, она может и должна меняться. Судя по постам задача плохо продумана
Код:
SELECT P.`id_lij`,L.`Fam`,L.`Ima`,L.`prokat`,L.`Ot`,P.`data_arendi`,P.`kol_Casov`,P.`kol_Casov`*100 AS stoimost
    LEFT JOIN `lijnik` L ON L.`id_lijnik`=P.`id_lijnik`
    LEFT JOIN `liji` J ON J.`id_lij`=P.`id_lij`
  WHERE ...
Цитата:
В начале делал как раз через FOREIGN KEY потом решил отказаться от этого, мешало при редактировании таблиц
Не надо отказываться, внешние ключи обеспечат целостность связей между таблицами, другими словами не дадут всякую ахинею ввести
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.06.2013, 16:19   #8
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
нишиша не понятно
чего в задаче спрашивают?
Реализовать информацию о прокате лыж.
PROkaZZZniK вне форума Ответить с цитированием
Старый 03.06.2013, 16:43   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Реализовать информацию о прокате лыж.
ну т.е. ничего делать не надо, повезло.
eval вне форума Ответить с цитированием
Старый 03.06.2013, 16:53   #10
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
ну т.е. ничего делать не надо, повезло.
почему это ничего не надо? Я сначала тоже так думал, сделал таблицу по минимуму, преподавателю не понравилось. Сказал что нужно все переделывать, И Сделать чтобы
Цитата:
я выдал лыжи №1 Иванову в 13:00 на 2часа, то Петрову я эти же лыжи смогу выдать только в 15:00.
я вот и не знаю как сделать чтобы лыжи №1 блокировались на эти 2 часа.
PROkaZZZniK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь многие ко многим gbolgov Microsoft Office Access 6 30.05.2013 15:22
Связь многие ко многим serox БД в Delphi 3 06.05.2013 22:45
Связь многие-ко-многим Аллен SQL, базы данных 1 05.11.2012 18:17
Связь многие ко многим %$PROregRAMi$t% Microsoft Office Access 9 11.06.2011 23:30
Связь многие-ко-многим andirock2112 БД в Delphi 10 12.04.2009 22:05