powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / циклические связи
14 сообщений из 14, страница 1 из 1
циклические связи
    #39992057
pvll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица доп.инфы (AddInfo) со ссылками на таблицу приборов (Device) и таблицу допустимых, но не обязательных, типовых сведений о приборе TypeInfo.
Device и TypeInfo имеют ссылки на TypeDevice (нарисовал как сумел)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
[TypeDevice]              [Device]                           [AddInfo]
 ID          Identity      ID         Identity                Device   Int FK на Device
 Description Int FK        TypeDevice Int FK на TypeDevice    TypeInfo Int FK на TypeInfo
 Name        Int FK       

                           [TypeInfo]
                            ID         Identity
                            TypeDevice Int FK на TypeDevice
                            TypeInfo   Int FK 

Где-то я уже встречал нежелание сотрудничать со стороны СУБД со ссылками на циклические связи.
Вопрос как обойтись без такой конструкции в этом случае?

Про EAV читал, но это не тот случай - TypeInfo фактически фильтр - ее наличие сильно упрощает код.
...
Рейтинг: 0 / 0
циклические связи
    #39992076
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvll,

TypeInfo ссылается сама на себя?
Пока непонятна проблема.
...
Рейтинг: 0 / 0
циклические связи
    #39992081
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvll,

где здесь циклические связи? В [TypeInfo]? А в чем проблема?
...
Рейтинг: 0 / 0
циклические связи
    #39992122
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvll,

AddInfo избыточен и не нужен. Надо засунуть его в typeinfo и добавить флаг.
Ну или ответить на вопрос, как связаны таблицы Device и TypeInfo.
...
Рейтинг: 0 / 0
циклические связи
    #39992124
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvll
Вопрос как обойтись без такой конструкции в этом случае?

В схеме бардак, связи и их смысл непонятны. У AddInfo еще одна связь на TypeInfo зачем? Они и так связаны через Device=>typeDevice=>TypeInfo. Зачем прыгать через голову? Если нужна избыточность (а она не нужна) не делайте FK, просто поставьте поле и придумайте, как его поддерживать в актуальном состоянии.
...
Рейтинг: 0 / 0
циклические связи
    #39992134
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
pvll
Вопрос как обойтись без такой конструкции в этом случае?

В схеме бардак, связи и их смысл непонятны. У AddInfo еще одна связь на TypeInfo зачем? Они и так связаны через Device=>typeDevice=>TypeInfo. Зачем прыгать через голову? Если нужна избыточность (а она не нужна) не делайте FK, просто поставьте поле и придумайте, как его поддерживать в актуальном состоянии.
Не, сама по себе двойная связь не криминал.

Представьте, в таблице устройств есть цена, и в таблице аксесуаров есть связь с устройствами, и цена.
И в обоих таблицах есть ссылка на справочник валют, для определения валюты к указанной цене.

По схеме здесь примерно так же.
У ТС же TypeDevice не является частью ПК для Device и TypeInfo (вот в этом случае действительно была бы избыточность)
...
Рейтинг: 0 / 0
циклические связи
    #39992135
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
У AddInfo еще одна связь на TypeInfo зачем?
Я это уже спросил, пока нет ответа.
Либо опечатка, либо это схема ID-Parent, но если и так, ничего криминального тут нет.
...
Рейтинг: 0 / 0
циклические связи
    #39992339
pvll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,
Интернета на работе не стало, поэтому только сейчас. По сути - да, я там накосячил выглядит оно вот так
DevDesc - Описание прибора (расходомер, градусник и т.д)
TypeDevice - Тип прибора: связка имени и назначения "расходомер ПРЭМ";
Device - конкретный экземпляр с серийником, от нее связи на поверку, объект где оно стоит, по возможности детали в AddInfo (диаметр, выходной сигнал, шкала, год выпуска и пр.)
TypeInfo - Полное имя доп.инфы и короткое для текстбокса ввода ("д40 гв17"- длина для температурника / диаметр для расходчика и год выпуска для всех) оч удобно вводить без кучи окошек и нажатий кнопок.
TypeAddInfo - связка типа прибора (DevDesc) и допустимых для него вариантов доп.инфо
AddInfo - значение конкретного парметра ([TypeAddInfo]) для экземпляра устройства, (Device). Когда станет неверным пишется в поле InvalidDate Date/

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
[DevDesc]             [TypeDevice]               [Device]                            [AddInfo]
 ID  Identity          ID      Identity           ID         Identity                 Device   Int FK на Device
 Desc VarChar          DevDesc Int FK на DevDesc  TypeDevice Int FK на TypeDevice     TypeAddInfo Int FK на TypeAddInfo
                       Name    Int FK       

[TypeInfo]            [TypeAddInfo]
 ID        Identity    ID      Identity
 TypInfo   VarChar     DevDesc Int FK на DevDesc
 ShortName VarChar     TypeInfo Int FK на TypeInfo   

...
Рейтинг: 0 / 0
циклические связи
    #39992408
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvll
выглядит оно вот так
Модель как модель, что тут неправильного?
Понятно, что AddInfo на TypeInfo, через Device и TypeAddInfo, будет ссылаться разными путями, независимо, т.е. возможно на 2 разных TypeInfo

Если это и нужно, то схема правильная.
...
Рейтинг: 0 / 0
циклические связи
    #39992420
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Если это и нужно, то схема правильная.

Схема не нормальная. Может быть запись в addinfo, где TypeAddInfo ссылается на DevDesc, который не ссылается на соответствующий device, т.е. схема допускает нарушение консистентности.
Костыльное решение- не делать индекс fk на TypeAddInfo и следить за ним как-то самим.
Более нормальный вариант - добавить еще один id в TypeAddInfo, уникальный в пределах одного TypeDevice, который проставлять в AddInfo и связывать всё до TypeAddInfo.
...
Рейтинг: 0 / 0
циклические связи
    #39992638
pvll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster
alexeyvg
Если это и нужно, то схема правильная.

Более нормальный вариант - добавить еще один id в TypeAddInfo, уникальный в пределах одного TypeDevice, который проставлять в AddInfo и связывать всё до TypeAddInfo.


В смысле TypeAddInfo должна ссылаться на DevDesc не напрямую а через TypeDevice? Ну т.е. просто ссылаться на TypeDevice?
И тянуть TypeDevice в AddInfo из Device и TypeAddInfo и ставить проверку совпадения (или можно 2 ФК на одно поле посадить)?
Тогда TypeAddInfo сильно вырастает, я вот подумывал обойтись табличной переменной создаваемой на старте сеанса.
...
Рейтинг: 0 / 0
циклические связи
    #39992652
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvll,

выпишите это все в одну денормализованную таблицу и примените правила нормализации. Получите искомую структуру.
...
Рейтинг: 0 / 0
циклические связи
    #39992779
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvll
В смысле TypeAddInfo должна ссылаться на DevDesc не напрямую а через TypeDevice?

Нет, всё так же остаётся, просто в TypeAddInfo еще один неуникальный в рамках таблицы id типа номер записи для каждого DevDesc (они же с TypeDevice не связаны 1 к 1?), в аddinfo проставлять этот самый номер. Связь addInfo с typeAddInfo пойдет по всем ключам + этот самый ид. В таком случае нарушить консистентность в AddInfo ссылкой на левый DevDesc (через typeAddInfo) не связанный с нужным Device не получится, однако случае удаления из typeAddInfo при выборке связь не сработает и в AddInfo будут болтаться левые записи, что в прочем, уже не так страшно.
...
Рейтинг: 0 / 0
циклические связи
    #39993150
pvll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,

Спасибо, подумаю.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / циклические связи
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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