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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

Спасибо за совет, впрочем. А по существу проблеммы есть предложения? Что такого в физической модели я еще не освоил, что помогло бы мне справиться с задачей?
...
Рейтинг: 0 / 0
19.07.2010, 11:00
    #36747630
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PowerDesigner - копирование индексов и ключей с эталона
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
19.07.2010, 15:29
    #36748427
rmka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PowerDesigner - копирование индексов и ключей с эталона
Не надо никакие VBскрипты. Пишешь (хранимую или) селект из системных таблиц, котоый выбирает название индексов, констрэйнов и т.д по исходной таблице и формирует SQL скрипт по созданию индексов, констрэйнов и т.д. Потом запускаешь селект (набор селектов), ны выходе получаешь SQL скрипт по созданию индексов, констрэйнов и т.д, и затем запускаешь его... и наступает счастье.
...
Рейтинг: 0 / 0
19.07.2010, 17:46
    #36748848
Alkatraz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PowerDesigner - копирование индексов и ключей с эталона
Denis Popov, да, уже начал читать, спасибо. параллельно делаю все ручками, так как надо все сделать быстро. )

rmka, не выход, к сожалению - надо что бы все в модели данных было - она далее используется как референсное пособие...
...
Рейтинг: 0 / 0
19.07.2010, 17:51
    #36748872
Flying Dutchman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PowerDesigner - копирование индексов и ключей с эталона
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
20.07.2010, 10:28
    #36749608
Alkatraz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PowerDesigner - копирование индексов и ключей с эталона
Flying Dutchman, вау! Спасибо! Так оно пойдет гораздо быстрее!
...
Рейтинг: 0 / 0
12.08.2010, 15:47
    #36788740
AnyaNartova
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PowerDesigner - копирование индексов и ключей с эталона
Замечание насчет концептуальной модели:
1. Вам сейчас ничего не мешает сгенерировать концептуальную модель из вашей физической, сделать нужную типизацию а потом сделать обратную генерацию - все связи сохранятся.
2. В концептуальной модели можно указать только идентификаторы (аналог ключа в физической модели), ключей в концептуальной модели нет.
3. При генерации физической модели из концептуальной идентификаторы превратятся в ключи (первичный, альтернативный) и по ним будут автоматически сгенерированы индексы.

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


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