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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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