powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Ссылки на разные таблицы
13 сообщений из 13, страница 1 из 1
Ссылки на разные таблицы
    #33592753
De
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, All!
в БД есть несколько таблиц объектов
например:
...
Здания
Машины
Мебель
...
у объектов есть критерий "местоположение", Мебель может находиться как в Здание так и в Машине, при попытке реализации, ввел два поля
"Тип объекта хозяина" и "Id объекта хозяина", но при длинной цепочки
Район->Город->(Здание, Машина)->Мебель возникает ряд проблем при построении запроса

появилась идея вынести "Тип объекта хозяина" и "Id объекта хозяина" в отдельную таблицу, а в объекте оставить ссылку на запись в этой таблице

Хотел узнать как кто решал подобные задачи, наверняка я не первый
Спасибо
...
Рейтинг: 0 / 0
Ссылки на разные таблицы
    #33592934
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На мой взгляд задача поставлена неверно или я ее не понимаю. У здания(склада) есть адрес состоящий(если верить КЛАДР) из Региона, района, города, населенного пункта и т.д. Это одна задача, надеюсь не вызывающая у вас сложности (как задать адрес часто обсуждается на данном форуме). У машины соответственно никаких адресов быть не может.

DeХотел узнать как кто решал подобные задачи, наверняка я не первый

Так вот и озвучте "задачу". Если задача состоит складском учете где находятся мебель, то надо начинать с приходных и расходных ведомостей.
...
Рейтинг: 0 / 0
Ссылки на разные таблицы
    #33593022
De
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Estets...машины соответственно никаких адресов быть не может.
почему?
если к такому объекту как Города добавит Дороги, а так же учесть что Машина может находится внутри Здания (гараж), то вот вам и адрес
EstetsТак вот и озвучте "задачу".

названия таблиц взяты для примера
таблицы:
...
Города
Здания
Машины
Топливо
...
Здания могут находится только в Городах
Машины в Городах и в Зданиях
Топливо в Зданиях(складах) и в Машинах

требуется определить CityId города в котором находится Топливо с известным FuelId
в данном случае проблема в том, что может быть несколько цепочек:
Город->Здание->Топливо
Город->Здание->Машина->Топливо
...
Рейтинг: 0 / 0
Ссылки на разные таблицы
    #33593529
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сумбурная постановка задачи, если не секрет это действительно вам поставили такую задачу, или это очередная дипломная работа на тему "а чем бы еще студентов занять"

Дано:
1) Список машин
2) Машина может одновременно находиться в одном месте
3) Место может быть либо гараж либо город
4) Есть список гаражей с адресом
5) Есть список городов

соответственно признаком состояния машины является CityID или BuildingID.

Задача:
Получить список машин либо с именем города, или с адресом гаража, в зависимости от того какое из полей заполнено. Я думаю не такой уж сложный отчет с CASE или UNION ALL.

По поводу второй части, все равно не очень понятно, нет такого понятия как ID топлива. Можно вести количественный учет топлива. Например

1) Есть список гаражей с определенным количеством топлива
2) Есть список машин с определенным количеством топлива

Задача? Получить итого?
...
Рейтинг: 0 / 0
Ссылки на разные таблицы
    #33593613
De
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Estets
уважаемый, зачем Вы все сводите к бухгалтерии, отвлекитесь, это не бух- и не складской учет

я же упомянул, что название таблиц взяты для примера, количество ступений/локаций может быть различное, заводить под каждый тип локации свой Id непростительная расточительство

если вам так уж не понравилось топливо давайте заменим его на человека:
объекты:
...
Страны
Города
Дороги
Здания
Машины
Человек
...
цепочки:
Человек-Здание-Город-Страна
Человек-Машина-Город-Страна
Человек-Машина-Дорога-Страна
Человек-Машина-Здание-Город-Страна
...
предположим нужно передать сообщение всем людям находящимся в городе с известным CityId

P.S.
проектирую под MySQL/Access
P.P.S.
нет это не курсовая и не диплом
...
Рейтинг: 0 / 0
Ссылки на разные таблицы
    #33593666
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Хотел узнать как кто решал подобные задачи

Опишите исходную задачу, без примеров.
...
Рейтинг: 0 / 0
Ссылки на разные таблицы
    #33593683
De
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>guest_20040621
да собственно последнее описание и есть часть задачи

проектирую некоторую модель мира (приближенно, помидорами не кидаться :) )

объекты разных типов храняться в разных таблицах
с помощью "типа объекта хранителя" и "Id хранителя" задается древовидная структура местоположения объекта в системе

требуется зная Id некотого узла цепочки произвести некоторые действия с определенным типом объектов входящих в эту ветку (выше описано, знаем CityId, нужно что-то сделать с объектами типа Человек входящих в эту ветку)

количество типов объектов (а соответственно и локаций) со временем может увеличится (система будет развиваться)
...
Рейтинг: 0 / 0
Ссылки на разные таблицы
    #33593746
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> с помощью "типа объекта хранителя" и "Id хранителя" задается древовидная
> структура местоположения объекта в системе

Поищите в форуме "метамодель", - была целая куча обсуждений.
...
Рейтинг: 0 / 0
Ссылки на разные таблицы
    #33595750
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deобъекты:
...
Страны
Города
Дороги
Здания
Машины
Человек
...
цепочки:
Человек-Здание-Город-Страна
Человек-Машина-Город-Страна
Человек-Машина-Дорога-Страна
Человек-Машина-Здание-Город-Страна
...
предположим нужно передать сообщение всем людям находящимся в городе с известным CityId

Уточнил бы:
Страна.. Человек - типы объектов.

В общем случае таблицы
Объекты(ИД,Тип,...)
Связи (Кто, С_кем, Тип_связи) или может более частный случай
Находится(Кто, Где).

и гулять по ним как вздумается.
Интересных тем здесь много. Ограничения на связи тема очень интересная. Например, разрешается ли
Человек-Машина-Машина-Здание-Город-Страна.
Административное деление опять же...

Цель то какая?
...
Рейтинг: 0 / 0
Ссылки на разные таблицы
    #33595991
De
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelR
Уточнил бы:
Страна.. Человек - типы объектов.

в самом первом сообщении:
в БД есть несколько таблиц объектов

Цель то какая?
глобально:
проектирую некоторую модель мира (приближенно, помидорами не кидаться :) )

локально:
выработать наиболее удобную структуру храненеия данных/связей и механизм их обработки, особенно при построении сложных запросов (с сокращением количества запросов, то есть не получение данных о каждой связи отдельным запросом, а попытаться получить их с минимальным количеством обращений к БД)
...
Рейтинг: 0 / 0
Ссылки на разные таблицы
    #33596304
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из опыта могу сказать, что если человек не может в 2-х абзацах описать задачу, то решения у этой задачи нет ;)

Deлокально:
выработать наиболее удобную структуру храненеия данных/связей и механизм их обработки, особенно при построении сложных запросов (с сокращением количества запросов, то есть не получение данных о каждой связи отдельным запросом, а попытаться получить их с минимальным количеством обращений к БД)

Если вопрос в том как организовать FK в базе если они ссылаются на разные таблицы (объекты) то можно пошерстить по форуму, этот вопрос достаточно часто всплывает. Краткое резюме - есть два подхода:
1) Не вносить FK в базу, связи обрабатывать клиентом (как это решается например в Axapta)
2) Делать одну базовую таблицу
Код: plaintext
1.
2.
ALL_ITEM(
ID,
TYPE_ID)
И все объекты будут одним концом смотреть на таблицу ALL_ITEM, остальные таблицы связаны по ID 1:1

Deпоявилась идея вынести "Тип объекта хозяина" и "Id объекта хозяина" в отдельную таблицу, а в объекте оставить ссылку на запись в этой таблице

Выносить связи в другую таблицу нужно только в случае если связей у одного экземпляра может быть больше одной. Т.е.:
Код: plaintext
1.
2.
Иванов -> (всязь со страной) -> Россия
Иванов -> (всязь с городом) -> Москва
Иванов -> (всязь с улицей) -> Маркса

Если связь одна то можно ее включить в раблицу ALL_ITEM как связь вама на себя:

Код: plaintext
1.
2.
3.
ALL_ITEM(
ID,
TYPE_ID,
PARENT_ID)

Тогда получаем древовидную структуру:
Код: plaintext
1.
2.
3.
4.
5.
6.
Россия
-- Москва
---- Маркса
------ Иванов
---- Энгельса
------ Петров
-- Питер

А как обходить дерево можно почитать на этом форуме или на форумах по соответствующим БД.
...
Рейтинг: 0 / 0
Ссылки на разные таблицы
    #33616923
Slider_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже поддерживаю идею ModelR, нужно всего несколько таблиц: Объекты, типы объектов, взаимосвязи объектов. Причем последняя должна поддерживать не только дерево, но и граф, для универсальности.
...
Рейтинг: 0 / 0
Ссылки на разные таблицы
    #33617589
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slider_spbПричем последняя должна поддерживать не только дерево, но и граф, для универсальности.Искренне печалюсь, думая об участи разработчиков этого дела.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Ссылки на разные таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]