Список форумов Шадринский форум -> Программирование -> Общие вопросы программирования -> [БД] Связь двух полей одной таблицы с одним полем другой
Начать новую тему   Ответить на тему   вывод темы на печать

[БД] Связь двух полей одной таблицы с одним полем другой

Автор
Сообщение
Sas'OK
Писатель


Пол: Пол:Муж.
Зарегистрирован: 06.03.2005
Сообщения: 321


Статус: Offline
СообщениеДобавлено: 2008.06.02 19:59.11
Ответить с цитатой
Вот собственно проблема. Представим детский сад. Малыша нужно перевести из одной группы в другую.
Собственно получается:

.....Малыши............................ Группы
-------------------................ ----------------------
имя_и_прочее.................Название группы
ид_малыша..........................ид_группы
..........|....................................|....|
..........|....................................|....|
..........|....................................|....|
..........|....................................|....|.................перемещение малышей
..........|....................................|....|.................-------------------------------
..........|....................................|....|---------------ид_принявшей_группы
..........|....................................|---------------------ид_отдавшей_группы
..........|--------------------------------------------------------ид_малыша

Как такое сотворить? Если возможно, то как будет выглядеть запрос который выведет имена групп?
_________________
Ищи баги в себе!!!
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.06.02 20:14.46
Ответить с цитатой
честно говоря я не понял схемку. можно структуру таблиц и связи хотя бы из MS VISIO?
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
vanish
Заслуженный писатель



Зарегистрирован: 23.05.2007
Сообщения: 849


Статус: Offline
СообщениеДобавлено: 2008.06.02 21:25.12
Ответить с цитатой
child (child.id, child.name, child.birth, group_id) дитё с идентификатором, именем, днем рождения, идентификатором группы

group (group.id, group.name) группа с идентификатором, именем

trans (trans.id, child_id, gr_old_id, gr_new_id) перемещения с идентификатором, идентификатором дитя, идентификатором старой и новой группы

вопрос про запрос ниасилил - примерно возможные:

select group.name from group - имена групп

select child.name from group, child where child.group_id=group.id and group.name='божий одуванчег' дети из одуванчега

Добавлено спустя 7 минут 7 секунд:

почему ты не связал сразу ребенка и группу мне не понятноSmile твою связь из названия темы фтопку
_________________
Посмотреть профиль Отправить личное сообщение
Sas'OK
Писатель


Пол: Пол:Муж.
Зарегистрирован: 06.03.2005
Сообщения: 321


Статус: Offline
СообщениеДобавлено: 2008.06.02 22:04.43
Ответить с цитатой
да что за день то такой
SQL Server evaluation period has expired.

Добавлено спустя 29 минут 25 секунд:

vanish писал(а):
child (child.id, child.name, child.birth, group_id) дитё с идентификатором, именем, днем рождения, идентификатором группы

group (group.id, group.name) группа с идентификатором, именем

trans (trans.id, child_id, gr_old_id, gr_new_id) перемещения с идентификатором, идентификатором дитя, идентификатором старой и новой группы

вопрос про запрос ниасилил - примерно возможные:

select group.name from group - имена групп

select child.name from group, child where child.group_id=group.id and group.name='божий одуванчег' дети из одуванчега

Добавлено спустя 7 минут 7 секунд:

почему ты не связал сразу ребенка и группу мне не понятноSmile твою связь из названия темы фтопку


неудачный пример, согласен
Возьмем другой пример, с товаром на складах. Нужно с одного склада переместить N-колво товара на другой

структура:
_________________
Ищи баги в себе!!!



tovar.jpg
 Описание:

Download File
 Имя файла:  tovar.jpg
 Размер файла:  22.3 KB
 Скачано:  1044 раз(а)

Посмотреть профиль Отправить личное сообщение
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2008.06.02 22:18.17
Ответить с цитатой
Sas'OK

И в чем сложность?
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.06.02 22:24.43
Ответить с цитатой
что-то с постановкой не то. вообще задача какая стоит и что надо сделать?

так-то вроде делают что-то типа

склад-товар и лог перемещений.

а тут предлагается вычислять наличие на складе товара из таблицы перемещений. этож башню свернуть скл-серверу )
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2008.06.02 22:36.21
Ответить с цитатой
надо просто ещё таблиц добавить.
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
Sas'OK
Писатель


Пол: Пол:Муж.
Зарегистрирован: 06.03.2005
Сообщения: 321


Статус: Offline
СообщениеДобавлено: 2008.06.02 22:38.35
Ответить с цитатой
andy ice писал(а):
вообще задача какая стоит и что надо сделать?

Есть такой документ "Перемещение", вот его и надо реализовать, там указываются "склад отправителя", "склад получателя" ну и товар соответственно, вот этот документ нужно хранить в БД чтобы видно было потом что куда и как перемещалость


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

Ну вообще то да. Я подумал также, поэтому сделал табличку остатки, там при поступлении и перемещении меняются данные. Но вопрос остался как хранить документы перемещения.

Добавлено спустя 1 минуту 10 секунд:

Leon писал(а):
Sas'OK

И в чем сложность?

в SQL запросе. Можешь показать? Чтобы выводился склад поставщик и получатель, у меня не получилось
_________________
Ищи баги в себе!!!
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.06.02 22:40.14
Ответить с цитатой
Sas'OK писал(а):
документы перемещения

это просто лог действий. тупой такой лог - с одного склада на другой переместили товар и в лог записали, стркутра лога типа
from_sklad_id, to_sklad_id, tovar_id, count, date, user_id
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2008.06.02 22:43.14
Ответить с цитатой
А, вроде понял, что ты хочешь.

Добавлено спустя 2 минуты 11 секунд:

ему надо подтягивать название складов из таблицы.

Добавлено спустя 48 секунд:

Sas'OK

слыхал про вложенные запросы?
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
Sas'OK
Писатель


Пол: Пол:Муж.
Зарегистрирован: 06.03.2005
Сообщения: 321


Статус: Offline
СообщениеДобавлено: 2008.06.02 22:46.20
Ответить с цитатой
Leon писал(а):
А, вроде понял, что ты хочешь.
ему надо подтягивать название складов из таблицы.

точно
Leon писал(а):

слыхал про вложенные запросы?

разумеется, можешь дать запрос как должно быть? как думаешь я заносил в таблицу peremesh_tovar? получал ИД и потом тупо вбивал? одним запросом делал
я всегда думал что они ПодЗапросы называются
_________________
Ищи баги в себе!!!


Последний раз редактировалось: Sas'OK (2008.06.02 22:47.41), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2008.06.02 22:46.58
Ответить с цитатой
да хоть как назови
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
Sas'OK
Писатель


Пол: Пол:Муж.
Зарегистрирован: 06.03.2005
Сообщения: 321


Статус: Offline
СообщениеДобавлено: 2008.06.02 22:51.41
Ответить с цитатой
извините что загадками, короче при запросе должно получиться:
склад_получатель........................склад_поставщик......................прочее
название склада получателя.....название склада поставщика........ну и прочие столбцы
_________________
Ищи баги в себе!!!
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.06.02 22:53.04
Ответить с цитатой
Sas'OK писал(а):
Есть такой документ "Перемещение", вот его и надо реализовать, там указываются "склад отправителя", "склад получателя" ну и товар соответственно, вот этот документ нужно хранить в БД чтобы видно было потом что куда и как перемещалость
помедитировал. это надо просто справку о перемещениях? или ПЕРЕМЕСТИТЬ всё таки. а то в перовм сообщении не очень понятно

если справку, то что-то типа (кстати таблицы permesh и peremesh_tovar можно объединить)

SELECT p.*, pt.peremesh_tovar_id, pt.tovar_id, pt.kol_vo, t.tovar_name, s1.sclad_name poluch_name, s2.sclad_name post_name
FROM peremesh p
LEFT OUTER JOIN peremesh_tovar pt ON p.peremesh_id=pt.peremesh_id
LEFT OUTER JOIN tovar t ON pt.tovar_id=t.tovar_id
LEFT OUTER JOIN sclad s1 ON p.sclad_poluch_id=s1.sclad_id
LEFT OUTER JOIN sclad s2 ON p.sclad_post_id=s2.sclad_id
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2008.06.02 22:56.57
Ответить с цитатой
select per.premesh_id, (select s.sclad_name from sclad s where s.sclad_id = per.sclad_post_id), (select s.sclad_name from sclad s where s.sclad_id = per.sclad_poluch_id) from peremesh per

какая херь
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
Sas'OK
Писатель


Пол: Пол:Муж.
Зарегистрирован: 06.03.2005
Сообщения: 321


Статус: Offline
СообщениеДобавлено: 2008.06.02 23:48.41
Ответить с цитатой
andy ice писал(а):
помедитировал. это надо просто справку о перемещениях?

Вот спс, как нибудь научишь медитировать? :-
andy ice писал(а):
t;]если справку, то что-то типа (кстати таблицы permesh и peremesh_tovar можно объединить)

Не стал этого делать, т.к. справка оч часто нужна (а туда заношу и сумму и дату, ну короче все что нужно для поверхностного), а товар раз в год, так что пусть остаются так
_________________
Ищи баги в себе!!!
Посмотреть профиль Отправить личное сообщение
Vladislav_133
Old Programmer


Пол: Пол:Муж.
Зарегистрирован: 27.09.2006
Сообщения: 4502


Статус: Offline
СообщениеДобавлено: 2008.06.05 14:53.18
Ответить с цитатой
Мне кажется автор ветки несколько запутался. Типичная ошибка - глагол считается сущностью. Сегодня проверял контрольную эта ошибка сплош и рядом. Как бы я со складами решал проблем (в упрощенном варианте, конечно). Есть список складов (таблица), есть список товаров (таблица). Между ними имеется ассоциативная связь, которая и выражает действие - перемещение товара с одного склада на другой. Это такая таблица посредник. В простейшем случае она состоит всего из двух полей - внешних ключей для первой и второй таблицы. Строка этой таблицы выражает собой перенос товара из одно склада на другой. Вот и все.
_________________
http://asm.shadrinsk.net
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2008.06.05 20:27.05
Ответить с цитатой
Vladislav_133

Vladislav_133 писал(а):
В простейшем случае она состоит всего из двух полей - внешних ключей для первой и второй таблицы.



Это как? Складов минимум 2. Значит поля нужно 3 Smile
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
Vladislav_133
Old Programmer


Пол: Пол:Муж.
Зарегистрирован: 27.09.2006
Сообщения: 4502


Статус: Offline
СообщениеДобавлено: 2008.06.05 20:52.10
Ответить с цитатой
Нет. Попробую изобразить.

Таблица Склады {id, name, ...}
Таблица Товары {id,name, ...}
Таблица прихо-расход {id, id1, id2, ...}

таблица приход_расход имеет два внешних ключа - id1 - для складов, id2 - для товаров.
При перемещении товара добавляются две записи уход и приход. В простейшем случае все. Если товар приобретают, продают, списывают, то одна. Все очень примитивно, но модель работает.

Т.е. конечно вы правы. Полей для полноценной работы надо больше. Но имел в виду минимум.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2008.06.05 20:56.27
Ответить с цитатой
Vladislav_133

тема - о перемещениях. 2 склада.

Добавлено спустя 31 секунду:

а хотя. Но это непрактично Smile

Добавлено спустя 38 секунд:

перемещение - 1 операция. У Вас получается 2.

Добавлено спустя 36 секунд:

нет связи между приходом на 1 склад и расходом с другого.

непрактично.
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
Vladislav_133
Old Programmer


Пол: Пол:Муж.
Зарегистрирован: 27.09.2006
Сообщения: 4502


Статус: Offline
СообщениеДобавлено: 2008.06.05 20:57.48
Ответить с цитатой
Да хоть пятьдесят. Я же говорю пара записей указывает перемещение с одного склада на другой.

Добавлено спустя 55 секунд:

И для групп такая схема подойдет.
_________________
http://asm.shadrinsk.net
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2008.06.05 20:57.55
Ответить с цитатой
Vladislav_133

где связь между ними?
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
Dio
Шаман-заводчанин


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 29757


Статус: Offline
СообщениеДобавлено: 2008.06.05 20:58.31
Ответить с цитатой
как минимум 3 поля надо. Извините.
_________________
Йа - водоросль.
Посмотреть профиль Отправить личное сообщение
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2008.06.05 20:59.49
Ответить с цитатой
Vladislav_133 писал(а):
При перемещении товара добавляются две записи уход и приход


остатки на складах будут правильными, но сама операция не отразится. А людям обчно это нужно.
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
Vladislav_133
Old Programmer


Пол: Пол:Муж.
Зарегистрирован: 27.09.2006
Сообщения: 4502


Статус: Offline
СообщениеДобавлено: 2008.06.05 21:04.47
Ответить с цитатой
В таблицу прихо-расход добавляется запись

(id, 2,4,0,80) - расход (0 - означает расход) со склада с номером 2 товара с номером 4, 80 - количество
(id, 5,4,1,80) - приход (1 - означает приход) на склад с номером 5, товара с номером 4.

Вот и вся схема перемещения. Запись может содержать также номер и дату документа по которой осуществляется эта операция и всякую всячину, важную для бухгалтерии.



Все отразится в таблице приход-расход и в окне пользователя. Ему ведь не надо знать, что в какой таблице хранится.


Последний раз редактировалось: Vladislav_133 (2008.06.05 21:06.05), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2008.06.05 21:05.15
Ответить с цитатой
Vladislav_133 писал(а):
Запись может содержать также номер и дату документа по которой осуществляется эта операция и всякую всячину, важную для бухгалтерии.


в 2х полях.
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
Dio
Шаман-заводчанин


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 29757


Статус: Offline
СообщениеДобавлено: 2008.06.05 21:05.16
Ответить с цитатой
ой, блин помню я эту базу на бэйсике... .
_________________
Йа - водоросль.
Посмотреть профиль Отправить личное сообщение
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2008.06.05 21:06.21
Ответить с цитатой
Vladislav_133

с точки зрения движений - Вы правы, с точки зрения практичности - нет.
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
Vladislav_133
Old Programmer


Пол: Пол:Муж.
Зарегистрирован: 27.09.2006
Сообщения: 4502


Статус: Offline
СообщениеДобавлено: 2008.06.05 21:07.21
Ответить с цитатой
Почему в двух полях. В таблицу прихо-расход помещайте хоть сколько полей.
_________________
http://asm.shadrinsk.net
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Dio
Шаман-заводчанин


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 29757


Статус: Offline
СообщениеДобавлено: 2008.06.05 21:07.26
Ответить с цитатой
Leon
+1
_________________
Йа - водоросль.
Посмотреть профиль Отправить личное сообщение
Страница 1 из 2
Начать новую тему   Ответить на тему   вывод темы на печать
На страницу 1, 2  След.
Показать сообщения:   
Список форумов Шадринский форум -> Программирование -> Общие вопросы программирования -> [БД] Связь двух полей одной таблицы с одним полем другой

 
Перейти: 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы