Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Можно ли вынести группы повторяющихся полей в отдельную таблицу / 23 сообщений из 23, страница 1 из 1
26.07.2005, 17:09
    #33185516
??
??
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
Есть несколько таблиц, в которых есть группы полей одинакового типа и содержания, но они все нужны в каждой.
Что-то типа

Код: plaintext
1.
2.
3.
4.
Родитель
- id
- параметр  1 
- параметр  2 

Код: plaintext
1.
2.
3.
4.
Потомок
- id родителя
- параметр  1 
- параметр  2 

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

И таких таблиц 4-5.
Вопрос в том, стоит ли вынести параметры в отдельную таблицу таким образом:

Код: plaintext
1.
2.
3.
Родитель
- id
- id параметров

Код: plaintext
1.
2.
3.
Потомок
- id родителя
- id параметров

Код: plaintext
1.
2.
3.
4.
Параметры
- id параметров
- параметр  1 
- параметр  2 
...
Рейтинг: 0 / 0
26.07.2005, 17:55
    #33185630
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
А какова логика - набор значений параметров составляет самостоятельную сущность, которую можно многократно использовать для характеризации различных экземпляров объектов?
...
Рейтинг: 0 / 0
26.07.2005, 18:04
    #33185644
??
??
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
В том-то и дело, что это не самостоятельная сущность, а именно набор параметров другой сущности. И каскадное удаление, например, придется перекладывать на клиентский софт.
С одной стороны получится одна форма, которая обслуживает группу параметров, они будут сопровождаться кучей и тыды., с другой надо попотеть, чтобы потом наладить добавление-удаление других сущностей.

Вот я и спрашиваю, насколько плохо подчиненную сущность сделать независимой, если так удобнее по некоторым соображениям. Какие бывают проблемы?
...
Рейтинг: 0 / 0
27.07.2005, 11:15
    #33186405
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
Тогда лучше просто декомпозиция на проекции, по которым однозначно восстанавливается исходная таблица
Код: plaintext
1.
2.
Родитель
- id

Код: plaintext
1.
2.
3.
Потомок
- id
- id родителя

Код: plaintext
1.
2.
3.
4.
Параметры
id родителя/потомка
- параметр  1 
- параметр  2 
...
Рейтинг: 0 / 0
27.07.2005, 16:30
    #33187454
??
??
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
Насколько я понял, в таком случае надо обеспечить,чтобы ID родителей и потомков никогда не пересекались?
...
Рейтинг: 0 / 0
27.07.2005, 17:07
    #33187567
??
??
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
И как тогда протянутся связи по внешним ключам (откуда и куда)?
...
Рейтинг: 0 / 0
27.07.2005, 17:27
    #33187614
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
??И как тогда протянутся связи по внешним ключам (откуда и куда)?
и туда и сюда (внешнее объединение) + "Перекрытие/наследование" в конструкции вида
CASE WHEN ....
...
Рейтинг: 0 / 0
27.07.2005, 18:31
    #33187786
Templar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
Таблицы оставить как есть, сделать на каждую пару проекцию с case-ми, которая заполняет поля параметров в в соответствии с вашей логикой и в приложении пользоваться только ей.
...
Рейтинг: 0 / 0
27.07.2005, 19:56
    #33187889
??
??
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
Спасибо, попробую.
...
Рейтинг: 0 / 0
28.07.2005, 06:31
    #33188139
unreger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
а как вам такое решение?

одна таблица
---------------
ID
ID_Родителя
Параметр1
Параметр2
---------------

если ID = ID_Родителя, то это родитель
...
Рейтинг: 0 / 0
28.07.2005, 08:39
    #33188218
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
если ID = ID_Родителя, то это родитель

Это неправильно. Для самого старшего родителя надо делать ID_Родителя := NULL. Что будет говорить нам о том, что у этого родителя нет родителя.
...
Рейтинг: 0 / 0
28.07.2005, 09:53
    #33188368
??
??
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
Это по сути неоднородные объекты.
У них просто есть блок одинаковых параметров, а сложить все в одну таблицу не выйдет хотя бы по тому, что ключи зависимых объектов составные и имеют разное количество элементов. Есть вариант с приделыванием суррогатного ключа...
Вообще, сейчас выложу диаграмму, чтобы не размахивать руками в воздухе.
...
Рейтинг: 0 / 0
28.07.2005, 10:38
    #33188499
??
??
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
Вот такая схема настройки репликации.
Есть варианты репликации (Replication), сервера (Host).
Общие настройки таблицы (Table) и ее полей (Field).
И частные настройки сервера для данного варианта репликации (HostInstance), частные настройки таблиц конкретного сервера в варианте репликации и их полей (TableInstance, FieldInstance).
Группа повторных параметров (active, direction, mode). На самом деле их больше, но это не важно.
Хочется отделить повторные параметры...
...
Рейтинг: 0 / 0
28.07.2005, 10:39
    #33188502
??
??
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
Картинка не прицепилась...
...
Рейтинг: 0 / 0
28.07.2005, 10:42
    #33188514
??
??
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
Еще раз...
...
Рейтинг: 0 / 0
28.07.2005, 11:46
    #33188802
unreger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
авторключи зависимых объектов составные

ааааа!!! ... ненавижу :)
всегда решаю через суррогатный
...
Рейтинг: 0 / 0
28.07.2005, 11:56
    #33188854
unreger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
авторесли ID = ID_Родителя, то это родитель

Это неправильно. Для самого старшего родителя надо делать ID_Родителя := NULL

кстати, почему неправильно? в задаче не было сказано о существовании единственного корневого (старшего) родителя, а так на столбец можно наложить NOT NULL
...
Рейтинг: 0 / 0
28.07.2005, 12:06
    #33188899
??
??
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
В картинке глюк, связь от FieldInstance должна идти к TableInstance.
Прошу прощения.

Единственного корня нет. Родительские объекты - варианты репликации (Replication)

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

А вообще, как правильно проектировать такие структуры, может кто сталкивался?
...
Рейтинг: 0 / 0
28.07.2005, 12:16
    #33188950
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
unreger в задаче не было сказано о существовании единственного корневого (старшего) родителя
не поал.
Чем Null мешает множественности корней?
unreger, а так на столбец можно наложить NOT NULL
зачем, простите?

с другой стороны, инетресно, что быстрее
WHERE pid IS NULL
(вариант - WHERE pid = 0)
или
WHERE pid = id

и что проще в FK
ON DELETE SET NULL (на убийство корня)
или триггер на он делете (с выставкой pid в id)
...
Рейтинг: 0 / 0
28.07.2005, 18:34
    #33190298
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
По диаграмме на первый взгляд:
1)От одного HostInstance пути
HostInstance -> Replication -> Host
и
HostInstance -> Host
могут вести к разным Host?
Если нет, то лучше убрать HostInstance -> Host, а Hostname включить в PK Replication . При этом можно оставить UNIQUE Replicationname.

2)Почему Replication.Mainhost не является ссылкрй на Host ?
...
Рейтинг: 0 / 0
29.07.2005, 10:06
    #33190807
??
??
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
В диаграмме ошибки, прошу прощения. Вот, кажется, правильный вариант.
...
Рейтинг: 0 / 0
29.07.2005, 16:43
    #33192226
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
ИМХО нет причин выносить параметры в специальную таблицу.
Если бы значения параметров формировали какие-то устойчивые многократно используемые сочетания (профили), то конечно- упростились бы запросы объектов с одинаковыми профилями.

З.Ы. Теперь не пойму, почему fieldinstance не ссылается на field. Ну не суть.
...
Рейтинг: 0 / 0
29.07.2005, 18:09
    #33192447
??
??
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли вынести группы повторяющихся полей в отдельную таблицу
На этот раз все правильно, он не должен туда ссылаться.
Очень хотелось сделать единый механизм заполнения параметров, по этому и возникла мысль вынести в отдельную таблицу, хотя, сущность так просто не отделяется...
Если в блоке параметров наступят изменения, придется во всех таблицах и в связанном с ними коде вносить изменения. При том, что известно, что блок параметров будет одинаковым для всех объектов.

Как можно вынести блок параметров в отдельную таблицу при том, что он должен быть связан с другими несколькими таблицами отношением 1 к 1?
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Можно ли вынести группы повторяющихся полей в отдельную таблицу / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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