powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Связывание таблиц различных объектов с одной
24 сообщений из 74, страница 3 из 3
Связывание таблиц различных объектов с одной
    #34928493
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaПоэтому делают наоборот, PK в основных сущностях уникальны в пределах БД и являются FК на Объект.Если при этом связь "чисто логическая" - то каким образом будет находиться нужная таблица?

Вот есть у нас таблица "Телефоны" и есть у нее ссылка на 10 таблиц "Физлица", "Организации" итп.
Как найти на какой имеено объект ссылается телефон, если есть номер?
Перебирать все 10 таблиц "а где у нас такой PK имеется"?

А если добавить поле "название таблицы для ссылки" - то надобность в сквозной нумерации во всей базе отпадает.

Ну и к чему Ваш совет тогда был?
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34930236
Leshij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On Fri, 09 Nov 2007 14:54:07 +0300, Bely <nospam@sql.ru>; wrote:

> Автор: Bely
> SeVa
> Поэтому делают наоборот, PK в основных сущностях уникальны в пределах БД
> и
> являются FК на Объект.
> Если при этом связь "чисто логическая" - то каким образом будет
> находиться
> нужная таблица?
>
> Вот есть у нас таблица "Телефоны" и есть у нее ссылка на 10 таблиц
> "Физлица", "Организации"
> итп.
> Как найти на какой имеено объект ссылается телефон, если есть номер?
> Перебирать все 10 таблиц "а где у нас такой PK имеется"?
>
> А если добавить поле "название таблицы для ссылки" - то надобность в
> сквозной
> нумерации во всей базе отпадает.
>
> Ну и к чему Ваш совет тогда был?
> Тема Ответить Сообщение
"название таблицы для ссылки" - это атрибут Объекта, а не таблицы с FK на
нее.
CREATE TABLE Objects (
id INT PRIMARY KEY IDENTITY,
tableName SYSNAME
);
CREATE TABLE Human (
id INT PRIMARY KEY REFERENCES Objects(id)
);
CREATE TABLE House (
id INT PRIMARY KEY REFERENCES Objects(id)
);
CREATE TABLE ObjectsInPhoto
photoId INT REFERENCES Photo(id),
objectId INT REFERENCES Object(id)
);
--
Здесь у нас туманы и дожди, здесь у нас холодные рассветы,
Здесь на неизведанном пути ждут замысловатые сюжеты!
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34931728
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyВот есть у нас таблица "Телефоны" и есть у нее ссылка на 10 таблиц "Физлица", "Организации" итп.
Как найти на какой имеено объект ссылается телефон, если есть номер?
Перебирать все 10 таблиц "а где у нас такой PK имеется"?
Уникальность как раз и позволяет избежать подобных извратов.Это будет тривиальный join одной view c таблицей телефонов.
А вот мне хотелось бы посмотреть, как тебе поможет TableName если усложнить задачу - выводить не название таблицы, а более вразумительную информацию: ФИО, название организации и тд.Причем один телефон может быть у разных объектов(такие варианты могут быть для фотографий, которые здесь и обсуждаются)
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34931777
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa BelyВот есть у нас таблица "Телефоны" и есть у нее ссылка на 10 таблиц "Физлица", "Организации" итп.
Как найти на какой имеено объект ссылается телефон, если есть номер?
Перебирать все 10 таблиц "а где у нас такой PK имеется"?
Уникальность как раз и позволяет избежать подобных извратов.Пример схемы и запроса "узнать тип объекта" - можете привести?
А то пока все слова, да слова...
SeVaЭто будет тривиальный join одной view c таблицей телефонов.
А вот мне хотелось бы посмотреть, как тебе поможет TableName если усложнить задачу - выводить не название таблицы, а более вразумительную информацию: ФИО, название организации и тд.Вы не поверите - будут точно такие же элементарные JOIN-ы
Код: plaintext
1.
2.
3.
SELECT *
FROM phone ph, organization o
WHERE ph.type_code = 'ORG'
  and o.id = ph.ref_id

SeVaПричем один телефон может быть у разных объектов(такие варианты могут быть для фотографий, которые здесь и обсуждаются)То же самое, только тип объекта (можно использовать название таблицы) указывается в связующей таблице.
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34932085
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyПример схемы и запроса "узнать тип объекта" - можете привести?
А то пока все слова, да слова...
Ворос абстрактный и для клиентских запросов он не нужен.
SELECT * FROM View WHERE Uid = @Uid.Хотя признак к какому объекту относится запись в табл. Объект у меня присутствует, но с одним существенным отличием,этот атрибут-целое число.
По одной простой причине,такая таблица - узкое место, которое должно быть максимально оптимизированно и varchar'ам там не место, для них резервируется пустое место и индексы уж больно пухлые будут.

BelyВы не поверите - будут точно такие же элементарные JOIN-ы
Да, джойны будут элементарные, но километровые и при добавлении нового объекта их всех прийдется переписывать.Если нравится вариант, когда нужно перелопачивать сотни запросов, мне добавить нечего.
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34932181
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaХотя признак к какому объекту относится запись в табл. Объект у меня присутствует, но с одним существенным отличием,этот атрибут-целое число.Мы говорим про наличие/отсутствие такого атрибута, а не про какого типа он должен быть.
Вы же говорили - что достаточно одного уникального PK по всей базе.
Теперь оказывается уже не достаточно.

Зачем такое надо?
Ответ простой - программе надо узнать какую форму открыть, если пользователь пытается открыть объект из общего списка объектов.
т.е. надо знать тип объекта.

SeVaДа, джойны будут элементарные, но километровые и при добавлении нового объекта их всех прийдется переписывать.Если нравится вариант, когда нужно перелопачивать сотни запросов, мне добавить нечего.1. Откройте для себя VIEW :)
2. Все зависит от дизайна - если добавление типа ведет к перелопачиванию всего - то это проблема дизайна.
При схеме описанной мной (как оказалось - и Вашей в том числе) - перелопачивать придется только то, что использует все типы сразу.
А таких мест, как правило, не очень много.
И там будет происходить, как правило, добавление функционала.
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34932439
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.Я не говорил об одном уникальном PK(такой вариант возможен, но опять же, это может быть узким местом).
2.Открывать весь список и ставить varchar - полный моветон.Это можно делать только на игрушечных БД.
3. автор1. Откройте для себя VIEW :)
Приведите примеры запросов для поиска по телефонам и ,скажем, по адресам, с выводом дополнительной информации(думаю, вывод списка Он, Она, Оно будет мало информативен для пользователя)?Что нужно будет сделать с ними при добавлении нового объекта?
Вопрос о дизайне я не задаю, думаю, и так все будет ясно после ответа.
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34932534
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa1.Я не говорил об одном уникальном PK(такой вариант возможен, но опять же, это может быть узким местом).
Перечитайте...
SeVaНе понятно, поскольку FK на несколько таблиц одновременно не бывает.
Поэтому делают наоборот, PK в основных сущностях уникальны в пределах БД и являются FК на Объект.

SeVa2.Открывать весь список и ставить varchar - полный моветон.Это можно делать только на игрушечных БД.300 тыс строк - проблем не было.
Что касается индексов - не стоит забывать, что 4-х символьная строка - не сильно отличается по размеру от INTEGER-а.

SeVa3. автор1. Откройте для себя VIEW :)
Приведите примеры запросов для поиска по телефонам и ,скажем, по адресам, с выводом дополнительной информации(думаю, вывод списка Он, Она, Оно будет мало информативен для пользователя)?Что нужно будет сделать с ними при добавлении нового объекта?
Вопрос о дизайне я не задаю, думаю, и так все будет ясно после ответа.Ладно, напишу еще один студенческий запрос (от Вас так ничего и не дождался... может запросы писать не умеете? :) ).

Код: plaintext
SELECT ph.ID\n  , ph.ref_id, ph.obj_type\n  , get_dtl_info(ph.ref_id, ph.obj_type)  -- Вот в этой функции и будет все зарыто.\nFROM phone ph\nWHERE ph.phone_num = \'2128506\'\n  and ph.city_code = \'812\'
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34932753
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
SELECT ph.ID
  , ph.ref_id, ph.obj_type
  , get_dtl_info(ph.ref_id, ph.obj_type)  -- Вот в этой функции и будет все зарыто.
FROM phone ph
WHERE ph.phone_num = '2128506'
  and ph.city_code = '812'
Угу.Для внятности еще хотелось бы и схему БД, а то
в другом топике было сказано:
авторЭто бывает удобно.
Например: Таблица ОБЪЕКТ, в которой записано название, тип и прочие общие св-ва объекта.
Например, у нас в системе есть объект: Дом, Организация, Человек.

Для дома нам надо хранить его: адрес, координаты на карте, план помещений (файл).
Для организации: ИНН, счет и пр. реквизиты.
Для человека: ФИО, пол, телефон, личный e-mail итп.

Для каждого типа объекта - в таком случае можно создать по отдельной таблице в которой будет храниться эта информация. И получится, что во всех этих трех таблицах первичный ключ совпадет с внешним ключем.
В схеме чуть выше, в ОБЪЕКТЕ никаких фотографий и номеров телефонов не присутствовало.
А теперь всплывает obj_type в телефонах.
PS. А что у вас пользователи делали с 300000?
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34932806
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaУгу.Для внятности еще хотелось бы и схему БДЯ, к сожалению, не имею достаточно свободного времени, что полностью задокументировать и привести все свои элементарные примеры - чтобы избежать Ваших придирок.

Примерную схему - приводил чуть выше.
Далее - все примеры надо рассматривать в контексте разговора.
SeVaВ схеме чуть выше, в ОБЪЕКТЕ никаких фотографий и номеров телефонов не присутствовало.А теперь всплывает obj_type в телефонах.Если у нас есть таблица OBJECTS (единый реестр объектов) - то все эти связки пот типу между разнородными таблицами - не нужны.
Все связи проводятся через эту центральную таблицу.

Если такой таблицы нет - то тогда необходимо в связующих таблицах с логической связью - держать поле "ТИП СВЯЗАННОГО ОБЪЕКТА".
И вообще - все это было ответом, на
"Поэтому делают наоборот, PK в основных сущностях уникальны в пределах БД и являются FК на Объект."

Так вот: я говорил, что единая нумерация объектов во всей БД
1) этого не достаточно
2) Можно обойтись и без нее (нумеровать объекты внутри своей таблицы)

остальное - см. выше.

SeVaPS. А что у вас пользователи делали с 300000?Обрабатывали эти данные, что же еще :)
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34932901
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меньше смайлов и "логических связей", а больше конкретики.
А то описывается одна схема, а запрос из другой оперы(думаю, уже понятно почему,если нет,то не стоит и продолжать).
Удачи.
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34932923
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaМеньше смайлов и "логических связей", а больше конкретики.Где же, уважаемый, Ваша схема?
Ее так просили показать, но никто не дождался...

Удачи.
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34933195
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ерничать время нашлось.
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34933245
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVa, задокументируйте, пожалуйста, Вашу схему и опубликуйте ее в разделе "Антипаттерны" и "Черный юмор".
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34933497
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, вот guest объявился.Я предупреждал.
Это логическая схема, физических реализаций может быть вагон и маленькая тележка.Достоинства и недостатки стратегий:
-одна таблица на подкласс
-одна таблица на классовую иерархию
-одна таблица на конкретный класс
давно уже обсосаны и абстрактное обсуждение их мало интересно, особенно в камотозном стиле .
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34933499
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa
Это та самая давно обещанная схема или другая?
Не вижу в ней решения для обсуждавшейся коллизии...
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34933548
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему б дискриминатор не завести - в Erwin кажись они даже на уровне нотации поддерживались?
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34933585
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVa, достоинств в Вашей схеме нет. Ни одного. Абсолютно тупая а-ля Тенцер структура.

В общем, аФФтАр, пЕши ИСЧО. А лучше - задокументировать и опубликовать.
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34937040
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Bely
> Вы не поверите - будут точно такие же элементарные JOIN-ы.
Отлично сказано!

2 guest_20040621
А что Вы скажете о моем варианте (см. начало топика)? Только сразу предупреждаю – это непромышленная система, а для домашнего пользования, где я сам во всех ролях – от проектировщика до пользователя. Хотя согласен, что проектировать надо в любом случае "чтоб из пушки стрелять".
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34937100
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> для домашнего пользования

А зачем Вам для домашнего пользования база данных? Может, задачу можно проще решить?

> проектировать надо в любом случае "чтоб из пушки стрелять"

Абсолютный результат требует бесконечного времени. Не бывает идеальных решений.
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34937225
Чендлер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621>
Абсолютный результат требует бесконечного времени.
где почитать доказательство этого утверждения :) ???
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34938296
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чендлергде почитать доказательство этого утверждения :) ???
Для этого достаточно почитать топики guest'a aka Shuklin изобретателя "однопользовательской файловой desktop базы" с "наличием миллионов threads одновременно"(To guest. Для каких воробьев это нужно?)
Там много интересного, не пожалеете.

Shuklin, жду продолжения!
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34940992
Чендлер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVa
Для этого достаточно почитать топики guest'a aka Shuklin


мне надо это для того чтобы если не успеваю по срокам то было что ответить :)
...
Рейтинг: 0 / 0
Связывание таблиц различных объектов с одной
    #34946560
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 guest_20040621
> А зачем Вам для домашнего пользования база данных? Может, задачу можно проще решить?
Я видел, как люди "базу" ведут на карточках. Знаете, таких, библиографических  Я уж лучше на компьютере…

> Абсолютный результат требует бесконечного времени. Не бывает идеальных решений.
"Будем делать хорошо, а плохо само получится" (не помню, кто сказал).

А по теме что-н.?
...
Рейтинг: 0 / 0
24 сообщений из 74, страница 3 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Связывание таблиц различных объектов с одной
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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