|
циклические связи
|
|||
---|---|---|---|
#18+
Есть таблица доп.инфы (AddInfo) со ссылками на таблицу приборов (Device) и таблицу допустимых, но не обязательных, типовых сведений о приборе TypeInfo. Device и TypeInfo имеют ссылки на TypeDevice (нарисовал как сумел) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Где-то я уже встречал нежелание сотрудничать со стороны СУБД со ссылками на циклические связи. Вопрос как обойтись без такой конструкции в этом случае? Про EAV читал, но это не тот случай - TypeInfo фактически фильтр - ее наличие сильно упрощает код. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2020, 19:29 |
|
циклические связи
|
|||
---|---|---|---|
#18+
pvll, TypeInfo ссылается сама на себя? Пока непонятна проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2020, 20:43 |
|
циклические связи
|
|||
---|---|---|---|
#18+
pvll, где здесь циклические связи? В [TypeInfo]? А в чем проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2020, 21:18 |
|
циклические связи
|
|||
---|---|---|---|
#18+
pvll, AddInfo избыточен и не нужен. Надо засунуть его в typeinfo и добавить флаг. Ну или ответить на вопрос, как связаны таблицы Device и TypeInfo. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 04:24 |
|
циклические связи
|
|||
---|---|---|---|
#18+
pvll Вопрос как обойтись без такой конструкции в этом случае? В схеме бардак, связи и их смысл непонятны. У AddInfo еще одна связь на TypeInfo зачем? Они и так связаны через Device=>typeDevice=>TypeInfo. Зачем прыгать через голову? Если нужна избыточность (а она не нужна) не делайте FK, просто поставьте поле и придумайте, как его поддерживать в актуальном состоянии. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 04:31 |
|
циклические связи
|
|||
---|---|---|---|
#18+
crutchmaster pvll Вопрос как обойтись без такой конструкции в этом случае? В схеме бардак, связи и их смысл непонятны. У AddInfo еще одна связь на TypeInfo зачем? Они и так связаны через Device=>typeDevice=>TypeInfo. Зачем прыгать через голову? Если нужна избыточность (а она не нужна) не делайте FK, просто поставьте поле и придумайте, как его поддерживать в актуальном состоянии. Представьте, в таблице устройств есть цена, и в таблице аксесуаров есть связь с устройствами, и цена. И в обоих таблицах есть ссылка на справочник валют, для определения валюты к указанной цене. По схеме здесь примерно так же. У ТС же TypeDevice не является частью ПК для Device и TypeInfo (вот в этом случае действительно была бы избыточность) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 07:42 |
|
циклические связи
|
|||
---|---|---|---|
#18+
crutchmaster У AddInfo еще одна связь на TypeInfo зачем? Либо опечатка, либо это схема ID-Parent, но если и так, ничего криминального тут нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 07:43 |
|
циклические связи
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 16:42 |
|
циклические связи
|
|||
---|---|---|---|
#18+
pvll выглядит оно вот так Понятно, что AddInfo на TypeInfo, через Device и TypeAddInfo, будет ссылаться разными путями, независимо, т.е. возможно на 2 разных TypeInfo Если это и нужно, то схема правильная. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 23:25 |
|
циклические связи
|
|||
---|---|---|---|
#18+
alexeyvg Если это и нужно, то схема правильная. Схема не нормальная. Может быть запись в addinfo, где TypeAddInfo ссылается на DevDesc, который не ссылается на соответствующий device, т.е. схема допускает нарушение консистентности. Костыльное решение- не делать индекс fk на TypeAddInfo и следить за ним как-то самим. Более нормальный вариант - добавить еще один id в TypeAddInfo, уникальный в пределах одного TypeDevice, который проставлять в AddInfo и связывать всё до TypeAddInfo. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 05:24 |
|
циклические связи
|
|||
---|---|---|---|
#18+
crutchmaster alexeyvg Если это и нужно, то схема правильная. Более нормальный вариант - добавить еще один id в TypeAddInfo, уникальный в пределах одного TypeDevice, который проставлять в AddInfo и связывать всё до TypeAddInfo. В смысле TypeAddInfo должна ссылаться на DevDesc не напрямую а через TypeDevice? Ну т.е. просто ссылаться на TypeDevice? И тянуть TypeDevice в AddInfo из Device и TypeAddInfo и ставить проверку совпадения (или можно 2 ФК на одно поле посадить)? Тогда TypeAddInfo сильно вырастает, я вот подумывал обойтись табличной переменной создаваемой на старте сеанса. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 17:43 |
|
циклические связи
|
|||
---|---|---|---|
#18+
pvll, выпишите это все в одну денормализованную таблицу и примените правила нормализации. Получите искомую структуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 18:07 |
|
циклические связи
|
|||
---|---|---|---|
#18+
pvll В смысле TypeAddInfo должна ссылаться на DevDesc не напрямую а через TypeDevice? Нет, всё так же остаётся, просто в TypeAddInfo еще один неуникальный в рамках таблицы id типа номер записи для каждого DevDesc (они же с TypeDevice не связаны 1 к 1?), в аddinfo проставлять этот самый номер. Связь addInfo с typeAddInfo пойдет по всем ключам + этот самый ид. В таком случае нарушить консистентность в AddInfo ссылкой на левый DevDesc (через typeAddInfo) не связанный с нужным Device не получится, однако случае удаления из typeAddInfo при выборке связь не сработает и в AddInfo будут болтаться левые записи, что в прочем, уже не так страшно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 04:29 |
|
|
start [/forum/topic.php?fid=46&fpage=50&tid=1685725]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 166ms |
0 / 0 |