powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / PowerDesigner - копирование индексов и ключей с эталона
13 сообщений из 13, страница 1 из 1
PowerDesigner - копирование индексов и ключей с эталона
    #36746780
Alkatraz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

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

Как можно автоматизированно разнести набор ключей и индексов с этой эталонной таблицы на все остальные таблицы?

Наверняка это можно сделать с помощью скрипта, но я к сожалению, совсем мало понимаю в VB.
...
Рейтинг: 0 / 0
PowerDesigner - копирование индексов и ключей с эталона
    #36746796
Фотография Microsoft-GLEAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты в своем уме?
в ДРУГИХ таблицах немыслимо копировать поля уже существующих таблиц

это нарушает первое правило нормализации данных - данные хранятся с ОДНОМ месте в СУБД - никаких дублей в принципе быть не может
в других таблах ставят ССЫЛКУ (контрейнс) на существующую таблу с данными

сдедовательно постановка задачи по КОПИРОВАНИЮ контренсов и наименований полей ВНУТРИ одной базы ИЗНАЧАЛЬНО ПОРОЧНА

Второе
- в функционально убогих СУБД - типа MS SQL - если конечно дублирование полей не противоречит нормализации данных - надо понимать, что имена контрейнсов (в пределах базы) - должны быть уникальные


Третье - если тебе надо клонировать СУБД (например из девелоперской среды в боевую) - воспользуйся например PowerArchitect


и, наконец, четвертое - все зависит от того, в какой СУБД ты работаешь

такие помыслы о дублировании могли возникнуть ну разве что в самых функционально УБОГИХ СУБД- например MS SQL или MySQL

в более ли менее развитых СУБД, например Postgresql есть операция НАСЛЕДОВАНИЯ одной таблицы от другой - те при содании таблицы A ты указываешь, что она наследуется от B - что и подразумевает, что все поля таблицы A окажутся в таблице B
...
Рейтинг: 0 / 0
PowerDesigner - копирование индексов и ключей с эталона
    #36746944
Alkatraz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Microsoft-GLEAM, сказок мне не надо, пожалуйста, рассказывать.

Во-первых, я говорю по PowerDesigner и даже мельком не упоминаю про копирование полей. Даже если мне надо было бы скопировать поля, то ничего НЕМЫСЛИМОГО я в этом не вижу.

Во-вторых, мне надо скопировать определения ИНДЕКСОВ и КЛЮЧЕЙ, так как ВСЕ мои таблицы имеют одинаковый набор системных полей, где указывается такая информация, как код пользователя, код записи, код группы записей и период действия записи с набором правил и разрешений и все эти поля имеют одинаковые наименование от таблицы к таблице, то и определения индексов и ключей так же будут одинаковыми.

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

Исходя из третьего пункта, хотелось бы как-то автоматизировать процесс. Я точно знаю, что с помощью скрипта это сделать можно, но я мало работал с VB, что бы сделать это самому.
...
Рейтинг: 0 / 0
PowerDesigner - копирование индексов и ключей с эталона
    #36746994
Кифирчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlkatrazВо-вторых, мне надо скопировать определения ИНДЕКСОВ и КЛЮЧЕЙ, так как ВСЕ мои таблицы имеют одинаковый набор системных полей, где указывается такая информация, как код пользователя, код записи, код группы записей и период действия записи с набором правил и разрешений и все эти поля имеют одинаковые наименование от таблицы к таблице, то и определения индексов и ключей так же будут одинаковыми.

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

Исходя из третьего пункта, хотелось бы как-то автоматизировать процесс. Я точно знаю, что с помощью скрипта это сделать можно, но я мало работал с VB, что бы сделать это самому.
мде, 100 таблиц довольно много, можно и не досмотреть где-нить
за VB в PD не знаю,
как вариант, можно нарисовать таблицы без набора "одинаковых системных полей", а в СУБД, написать скрипт, который циклом пробежится по таблицам, и доделает нужные поля, индексы и связи через dynamic sql
потом сделать "update model from database", и работать с базой дальше.

можно и клиента на VB(C#,Delphi,Java...) написать, который аналогичную операцию сделает
конечно, если СУБД поддерживает наследование, как например PostgreSQL, то эта задача во много упрощается

СУБД то какая?
...
Рейтинг: 0 / 0
PowerDesigner - копирование индексов и ключей с эталона
    #36747014
Alkatraz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кифирчик, SQL Server...

Можно и так, но база уже готова и работает - я оптимизировал индексы и ключи вместе с запросами, не трогая саму структуру - потребовалось убрать все существующие индексы и ключи (что сделать элементарно, ломать не сроить) и добавить новые. Два ключа (основной и альтернативный) и три индекса на таблицу.

Пересоздавать базу будет гораздо дольше - надо ведь перепрописать все отношения, комментарии к ним и т.д.
...
Рейтинг: 0 / 0
PowerDesigner - копирование индексов и ключей с эталона
    #36747465
Kasper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
off-top/Для будущих поколений. Используйте для проектирования ConceptualDataModel c типизированием, а затем PDM. "Subtypes – lists the subtypes that inherit from the entity".
P. S. Освоить надо не VB, а объектную модель PD и PhysicalDataModel.
...
Рейтинг: 0 / 0
PowerDesigner - копирование индексов и ключей с эталона
    #36747539
Alkatraz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kasper, забавно, когда я спрашивал, делать ли мне концептуальную модель или ограничиться физической, то мне однозначно советовали остаться на физической модели.

Спасибо за совет, впрочем. А по существу проблеммы есть предложения? Что такого в физической модели я еще не освоил, что помогло бы мне справиться с задачей?
...
Рейтинг: 0 / 0
PowerDesigner - копирование индексов и ключей с эталона
    #36747630
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 18.07.2010 01:28, Alkatraz wrote:

> Есть несколько таблиц, которые имеют одинаковый набор системных полей. Есть эталонная таблица, в корой созданы все
> необходимые индексы и ключи по этим системным полям - они имеют нужные наименования и описания.
>
> Как можно автоматизированно разнести набор ключей и индексов с этой эталонной таблицы на все остальные таблицы?
>
> Наверняка это можно сделать с помощью скрипта, но я к сожалению, совсем мало понимаю в VB.

По-моему действительно это проще всего сделать черех VBScript, но, к сожалению, его придется изучить:) Начни может с
поиска по слову CreateNew: http://www.sql.ru/forum/actualtopics.aspx?search=createNew&bid=36 Еще стоит поискать по
этому слову в документации но PowerDesigner:

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.powerdesigner.15.2/doc/html/title.html
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
PowerDesigner - копирование индексов и ключей с эталона
    #36748427
rmka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не надо никакие VBскрипты. Пишешь (хранимую или) селект из системных таблиц, котоый выбирает название индексов, констрэйнов и т.д по исходной таблице и формирует SQL скрипт по созданию индексов, констрэйнов и т.д. Потом запускаешь селект (набор селектов), ны выходе получаешь SQL скрипт по созданию индексов, констрэйнов и т.д, и затем запускаешь его... и наступает счастье.
...
Рейтинг: 0 / 0
PowerDesigner - копирование индексов и ключей с эталона
    #36748848
Alkatraz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis Popov, да, уже начал читать, спасибо. параллельно делаю все ручками, так как надо все сделать быстро. )

rmka, не выход, к сожалению - надо что бы все в модели данных было - она далее используется как референсное пособие...
...
Рейтинг: 0 / 0
PowerDesigner - копирование индексов и ключей с эталона
    #36748872
Flying Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlkatrazЗдравствуйте!

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

Как можно автоматизированно разнести набор ключей и индексов с этой эталонной таблицы на все остальные таблицы?

Наверняка это можно сделать с помощью скрипта, но я к сожалению, совсем мало понимаю в VB.

Вот пример скрипта, который для каждой таблицы в модели добавляет Unique constraint для каждого столбца с именем NAME (предполагается, что каждая таблица содержит такой столбец).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
'-------------------------------------------------------------------------------
' Create unique constraint for every table on a diagram (Power Designer 15.2).
' It is assumed that every table has a NAME column.
'-------------------------------------------------------------------------------
Option Explicit

Dim model
set Model = ActiveModel ' Current active model
If (model Is Nothing) Or (Not model.IsKindOf(PdPDM.cls_Model)) Then
   MsgBox "The current model is not a PDM model."
Else
   ProcessTables model
End If

'-----------------------------------------------------------------------------
' Recursively process all tables.
'-----------------------------------------------------------------------------
Sub ProcessTables(package)
   ' Process all tables belonging to this package.
   Dim table
   For Each table In package.Tables
      ' Shortcuts are also processed.
      ProcessTable package, table
   Next

   ' Process tables defined in all subpackages.
   Dim subpackage
   For Each subpackage in package.Packages
      If Not subpackage.IsShortcut Then
         ProcessTables subpackage
      End If
   Next
End Sub

'-----------------------------------------------------------------------------
' Recursively process all tables.
'-----------------------------------------------------------------------------
Sub ProcessTable(package, table)
   dim shortcutCharacter
   if table.isShortcut then
      ' Do nothing
   else
      ' Create a key
      CreateKey table, "UC_" + table.Name + "_Name", "Key on the Name column", "Name"
   end if
End Sub

'-----------------------------------------------------------------------------
' Add a key to a table.
'
' Parameters:
'     table
'     keyName
'     keyComment
'     columnNames   List of column names separated by comma's
'-----------------------------------------------------------------------------
Sub CreateKey(table, keyName, keyComment, columnNames)
   dim key : set key = table.Keys.CreateNew()
   dim colArray : colArray = split(LCase(columnNames), ",")

   key.Name = keyName
   key.Code = keyName
   key.Comment = keyComment
   key.ConstraintName = keyName

   dim column
   dim counter
   For Each column In table.Columns
      for counter =  0  to UBound(colArray)
         if colArray(counter) = LCase(column.Name) then
            key.Columns.Add(column)
         end if
      next
   Next
   set key = Nothing
   set column = Nothing
End Sub
...
Рейтинг: 0 / 0
PowerDesigner - копирование индексов и ключей с эталона
    #36749608
Alkatraz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Flying Dutchman, вау! Спасибо! Так оно пойдет гораздо быстрее!
...
Рейтинг: 0 / 0
PowerDesigner - копирование индексов и ключей с эталона
    #36788740
AnyaNartova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Замечание насчет концептуальной модели:
1. Вам сейчас ничего не мешает сгенерировать концептуальную модель из вашей физической, сделать нужную типизацию а потом сделать обратную генерацию - все связи сохранятся.
2. В концептуальной модели можно указать только идентификаторы (аналог ключа в физической модели), ключей в концептуальной модели нет.
3. При генерации физической модели из концептуальной идентификаторы превратятся в ключи (первичный, альтернативный) и по ним будут автоматически сгенерированы индексы.

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


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