powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реляционка тут бессильна?
19 сообщений из 169, страница 7 из 7
Реляционка тут бессильна?
    #39524567
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АнатоЛойregisterersКстати, если это не костыль, то напишите JOIN-запрос для такого кейса)))
Что именно хотите видеть в результатах? И допишите реальные реквизиты у таблиц...

Дано: таблица супер-типа и множество таблиц под-типов (например, видов товаров)
Требуется: вывести все записи из таблицы супер-типа с заджоиненным произвольным полем (например, именем) из каждой таблицы под-типа

Я понимаю, что запрос должен быть чем то вроде этого:
Код: sql
1.
2.
3.
4.
5.
SELECT sub1.field FROM supertable AS super JOIN subtable1 AS sub1 ON sub1.id = super.id WHERE super.type = 'sub1'
UNION
SELECT sub2.field FROM supertable AS super JOIN subtable2 AS sub1 ON sub2.id = super.id WHERE super.type = 'sub2'
UNION
SELECT sub3.field FROM supertable AS super JOIN subtable3 AS sub1 ON sub3.id = super.id WHERE super.type = 'sub3'


Но ведь вопрос в том, что нужно заранее знать, какие типы под-типы существуют, а реляционная теория не позволяет абстрагировать эту задачу на произвольные наборы под-типов. Вот если бы существовал условный механизм объединения подобный таковому в случае слияния, что-то вроде "UNION ON" тогда другой вопрос. А так, выглядит, что реляционная теория неполна.

P.S. Надеюсь на конструктивный диалог, в отличие от некоторых товарищей, комментировавших выше.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39524575
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersMasterZivпропущено...


Ты спрашивал -- я тебе ответил. Кстати, то же ответили тебе прямо или косвенно намекали на это некоторые другие
отвечающие.

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

А вообще, да, смотрю оффтоп потёк ручьём... По поводу главной темы топика, благодарю всех, что помогли уточнить суть вопроса, а именно - то, что в реляционной теории не существует способа ограничить возможность ссылаться двум и более дочерним сущностям на одну родительскую. И только родительская определяет свою принадлежность к той или иной дочерней сущности, тогда как все остальные, на нее ссылающиеся - мусорные. Введение дискриминатора в состав ключа, как предлагал известный персонаж из Простоквашино в посте 20787976 ещё более костыльное решение, нигде такого не встречал...

В общем, подытожим. Вывод такой, что нельзя однозначно ответить на вопрос топика - "да" или "нет". Реляционка позволяет реализовать отношения вида тип-подтип, но контроль за ограничениями, о которых говорилось выше, ложится на приложение.

З.Ы. А по логике корзины - целесообразно создать отдельный топик, тема довольно интересная, но здесь это оффтоп.


ты фантазёр, однако...
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39524576
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAMasterZivпропущено...


в виде связи 1-к-0..1 между 2-мя таблицами
И так и эдак бывает. В примере выше у меня Документ - это абстрактная сущность.


родитель один у , скажем двух классов.
его связь с каждой из дочерних таблиц один к ноль или один, потому что записей в обоих дочерних классах может не быть , т.е. в каждом наследнике запись либо она, либо её нет вообше.
поэтому и 1:0..1 , а не "бывает так и эдак" .
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39524578
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersАнатоЛойпропущено...

Что именно хотите видеть в результатах? И допишите реальные реквизиты у таблиц...

Дано: таблица супер-типа и множество таблиц под-типов (например, видов товаров)
Требуется: вывести все записи из таблицы супер-типа с заджоиненным произвольным полем (например, именем) из каждой таблицы под-типа

Я понимаю, что запрос должен быть чем то вроде этого:
Код: sql
1.
2.
3.
4.
5.
SELECT sub1.field FROM supertable AS super JOIN subtable1 AS sub1 ON sub1.id = super.id WHERE super.type = 'sub1'
UNION
SELECT sub2.field FROM supertable AS super JOIN subtable2 AS sub1 ON sub2.id = super.id WHERE super.type = 'sub2'
UNION
SELECT sub3.field FROM supertable AS super JOIN subtable3 AS sub1 ON sub3.id = super.id WHERE super.type = 'sub3'


Но ведь вопрос в том, что нужно заранее знать, какие типы под-типы существуют, а реляционная теория не позволяет абстрагировать эту задачу на произвольные наборы под-типов. Вот если бы существовал условный механизм объединения подобный таковому в случае слияния, что-то вроде "UNION ON" тогда другой вопрос. А так, выглядит, что реляционная теория неполна.

P.S. Надеюсь на конструктивный диалог, в отличие от некоторых товарищей, комментировавших выше.

Чё там не скачаешь ты фишку нигде ниразу...

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

мне кажется уже в психологии у тебя проблемым ты просто не хочешь понимать то, что видимо понять способен. и этот ментальный барьер только тебе и мешает.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39524580
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
скачаешь/сечёшь
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39524583
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivskyANAпропущено...

И так и эдак бывает. В примере выше у меня Документ - это абстрактная сущность.


родитель один у , скажем двух классов.
его связь с каждой из дочерних таблиц один к ноль или один, потому что записей в обоих дочерних классах может не быть , т.е. в каждом наследнике запись либо она, либо её нет вообше.
поэтому и 1:0..1 , а не "бывает так и эдак" .
В примере выше не бывает записи только в таблице fin.Document, то есть не бывает ситуации "либо её нет вообше". Понимаете?

Назовём это "наследование от абстрактного класса" :)
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39524795
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вообще уже запутался, что за "супер-типы" начались? кто это?

registerersСуть проблемы можно пояснить на примере того же банального интернет-магазина. Есть множество таблиц разных товаров, потому что набор свойств (атрибутов) у них разный. Например, булка хлеба и како-нибудь девайс. Вопрос - как положить в корзину и то, и другое, и пятое-десятое? Самое простое, что приходит в голову - это в таблице корзины выделить одно поле под айди товара, а другое - под ... (барабанная дробь) ... НАЗВАНИЕ ТАБЛИЦЫ, к которой относится этот айдишник. Но это же костыль-костыльный... Потому что никаких реляционных связей тут не построишь.
у "банального интернет-магазина" нет проблем. "Банально" там достаточно знать все ID, которые встречаются, выполнить 1 IN-query и вытащить карту соответствий, которой потом и пользоваться при выводе.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39524811
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл добавить, что у вас он НЕ банальный, отсюда и все беды
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39524833
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78забыл добавить, что у вас он НЕ банальный, отсюда и все беды
Ну он же чёрным по белому написал в первом посте: "Вот есть такой теоретический вопрос о реляционных связях между гетерогенными структурами данных" :)
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39524952
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да уж, я смотрю, тут собрались почти одни снобы и тролли, которым нечего сказать по сути кроме демагогии и переходов на личность собеседника. Надеюсь, что найдётся хоть один адекватный спец в реляционке, который понимает суть проблемы...
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39524986
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerers,

да суть то простая
нельзя указать форинкей к вью
потому приходится делать промежуточную таблицу (Union всех ID всех таблиц)
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39524996
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ViPRosregisterers,

да суть то простая
нельзя указать форинкей к вью
потому приходится делать промежуточную таблицу (Union всех ID всех таблиц)

та не, вьюхи тут не при чём
это скорее вопрос о монопольном владении внешним ключом
(похоже на рэпчину))
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39525012
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAtip78забыл добавить, что у вас он НЕ банальный, отсюда и все беды
Ну он же чёрным по белому написал в первом посте: "Вот есть такой теоретический вопрос о реляционных связях между гетерогенными структурами данных" :)
какой же он теоретический? "наполнить корзину", это самый обязательный вопрос в любом магазине.
не надо было под каждый вид товара создавать отдельную таблицу с его свойствами. Тысячи их.
jsonb добавьте в order_products и зафиксируйте все выбранные свойства. Нельзя там IDы свойств держать, свойства ведь могут и исчезнуть через X лет.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39525069
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78skyANAпропущено...

Ну он же чёрным по белому написал в первом посте: "Вот есть такой теоретический вопрос о реляционных связях между гетерогенными структурами данных" :)
какой же он теоретический? "наполнить корзину", это самый обязательный вопрос в любом магазине.
не надо было под каждый вид товара создавать отдельную таблицу с его свойствами. Тысячи их.
jsonb добавьте в order_products и зафиксируйте все выбранные свойства. Нельзя там IDы свойств держать, свойства ведь могут и исчезнуть через X лет.
Магазины появились ещё до jsonb и проблем с добавлением товара в корзину у них нет. Автор таки теоритизирует :)
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39525164
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAtip78пропущено...

какой же он теоретический? "наполнить корзину", это самый обязательный вопрос в любом магазине.
не надо было под каждый вид товара создавать отдельную таблицу с его свойствами. Тысячи их.
jsonb добавьте в order_products и зафиксируйте все выбранные свойства. Нельзя там IDы свойств держать, свойства ведь могут и исчезнуть через X лет.
Магазины появились ещё до jsonb и проблем с добавлением товара в корзину у них нет. Автор таки теоритизирует :)
Конечно, теоретизирую, я с самого начала говорил, что меня интересует исключительно теория. Я в своей практике рефакторил достаточно разных систем и насмотрелся разного. Проблем с добавлением в корзину нет, но решаются они костыльным способом. Об этом идёт речь. Только введение ограничения монопольного владения внешним ключом могло бы решить проблему. Но, наверное, это будет не в этой Вселенной... Хотя, написать чувакам из рабочей группы ISO/IEC, наверное стоит)) Возможно там будет дискуссия более продуктивная, чем здесь)))
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39525330
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersВот есть такой теоретический вопрос о реляционных связях между гетерогенными структурами данных. Матюк страшный, но на самом деле всё просто и такая проблема довольно часто возникает на практике, например в интернет-магазинах, всевозможных CRM-системах и не только.

Суть проблемы можно пояснить на примере того же банального интернет-магазина. Есть множество таблиц разных товаров, потому что набор свойств (атрибутов) у них разный. Например, булка хлеба и како-нибудь девайс. Вопрос - как положить в корзину и то, и другое, и пятое-десятое? Самое простое, что приходит в голову - это в таблице корзины выделить одно поле под айди товара, а другое - под ... (барабанная дробь) ... НАЗВАНИЕ ТАБЛИЦЫ, к которой относится этот айдишник. Но это же костыль-костыльный... Потому что никаких реляционных связей тут не построишь.



Мне в голову приходит только два типичных решения - это либо использования паттерна EAV (entity, attribute, value), либо все уникальные атрибуты каждого из видов товара держать в поле с особым типом данных - JSON/JSONB, как в БД PostgreSQL. Тогда, естесственно, сущность (таблица) будет одна и её можно спокойно класть в корзину.

Так вот интересно, существуют ли какие то более элегантные решения этой проблемы?
Сначала, все-таки, нужно ответить себе на вопрос: а почему не все товары в одной таблице?:) Что в этом плохого, конкретно?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39525333
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosregisterers,

да суть то простая
нельзя указать форинкей к вью
потому приходится делать промежуточную таблицу (Union всех ID всех таблиц)
)))
Во-первых, Вы находитесь в разделе "Проектирование баз данных", а не "Проектирование реляционных баз данных".
Во-вторых, для РМД еще не удалось найти ни одной практической задачи, то есть, ее практическая ценность равна нулю.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39525473
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бредятина,

Это-же Ваш человек!
Вы - отрицаете реляционные БД, ТС - сомневается в них. Ему ещё один шаг, и вас тут на форуме будет двое.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39525833
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11Бредятина,

Это-же Ваш человек!
Вы - отрицаете реляционные БД, ТС - сомневается в них. Ему ещё один шаг, и вас тут на форуме будет двое.
Я ничего не отрицаю, всегда сомневаюсь, и никогда свое мнение не высказываю:) Мнение может обидеть какого-нибудь (совсем не знакомого) человека:) Факты, конечно, тоже могут обидеть, но это уже проблема обиженного. Как правило:)
...
Рейтинг: 0 / 0
19 сообщений из 169, страница 7 из 7
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реляционка тут бессильна?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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