Automatyczne generowanie MySQL Database Diagram




Jestem zmęczony otwarcie Dia i tworzenie diagramu bazy danych na początku każdego projektu. Czy istnieje narzędzie, które obecnie nie pozwoli mi wybrać konkretne tabel, a następnie utworzyć schemat bazy danych dla mnie w oparciu o bazę danych MySQL? Korzystnie byłoby to pozwala mi edytować schemat później, ponieważ żaden z kluczy obcych są ...


Oto co ja wyobrażając schemat-wise (proszę wybaczyć ten okropny wygląd danych, nie zaprojektować go Skupmy się na koncepcji diagramu, a nie na rzeczywistych danych, które reprezentuje na tym przykładzie;).):


![diagram](https://i.stack.imgur.com/lxvlR.jpg)
[zobacz pełny schemat rozmiarze](https://i.stack.imgur.com/ZnN2O.png)
Spróbuj MySQL Workbench, dawniej DBDesigner 4:


<http://dev.mysql.com/workbench/>


To ma tryb „Reverse Engineer Database”:


[![wprowadzić opis obrazu tutaj](https://i.stack.imgur.com/wcoq9.png)](https://i.stack.imgur.com/wcoq9.png)
<p>oprócz innych odpowiedzi ...</p><p> <a href="https://dba.stackexchange.com/questions/1677/is-there-any-good-tool-for-making-database-design-and-prototypes/1678#1678">najpierw przechwytywanie modelu koncepcyjnego</a> powinno określać zakres i wymagania. na tej podstawie możesz uzyskać logiczne i fizyczne modele danych.</p><p>gdy jest to w większości statyczne, masz stabilną bazę danych, na której można zbudować aplikację. jest to sprzeczne z pierwszą opcją.</p><p>twój drugi punkt zakończy się brudną, niemożliwą do utrzymania <em> kulą błota </em>. model danych nigdy nie zostanie naprawiony: jeśli nie zaprojektowałeś go z góry, nie będziesz miał czasu, aby go naprawić przed wysyłką. będziesz zbyt zajęty hakowaniem rzeczy razem.</p><p>nastąpią niewielkie zmiany w schemacie, łączenie lub dzielenie tabel, zmiana relacji itp., ale na zlokalizowanych „wyspach”, a model + podstawowy projekt pozostaną niezmienione.</p> <p>ma więcej kolumn niż pokaż status tabeli; ale robi sztuczkę:</p><pre><code>select * from information\_schema.tables where table\_schema = database(); </code></pre><p>aktualizacja 2011-06-07 19:02</p><pre><code>select table\_name,engine,version,row\_format,table\_rows,avg\_row\_length, data\_length,max\_data\_length,index\_length,data\_free,auto\_increment, create\_time,update\_time,check\_time,table\_collation,checksum, create\_options,table\_comment from information\_schema.tables where table\_schema = database(); </code></pre><p>te zapytania działają, jeśli ustawisz bieżącą bazę danych.</p><p>możesz także kodować konkretną bazę danych:</p><pre><code>select table\_name,engine,version,row\_format,table\_rows,avg\_row\_length, data\_length,max\_data\_length,index\_length,data\_free,auto\_increment, create\_time,update\_time,check\_time,table\_collation,checksum, create\_options,table\_comment from information\_schema.tables where table\_schema = 'mysql'; </code></pre> <p>możesz zbudować ciąg za pomocą widoków katalogu, np .:</p><pre><code>declare @sql nvarchar(max) = n''; select @sql += ' drop table ' + quotename(s.name) + '.' + quotename(t.name) + ';' from sys.tables as t inner join sys.schemas as s on t.[schema\_id] = s.[schema\_id] where t.name like 'lg\_001%'; print @sql; -- exec sp\_executesql @sql; </code></pre><p>oczywiście istnieją potencjalne luki, na przykład jeśli te tabele mają powiązania z kluczem obcym, musisz je najpierw usunąć lub ustawić wyniki tak, aby tabele były usuwane w określonej kolejności.</p><p>aby uzyskać listę tabel, użyj:</p><pre><code>select s.name, t.name from sys.tables as t inner join sys.schemas as s on t.[schema\_id] = s.[schema\_id] where t.name like 'lg\_001%'; </code></pre> <p>najlepszym rozwiązaniem, które sam odkryłem, było <code>desc table\_name</code> komenda. więcej informacji znajduje się na <em> <a href="http://www.hscripts.com/tutorials/mysql/listing-tables.php">wyświetl tabele mysql</a> </em>. to polecenie podaje opis jednej tabeli bazy danych, a dokładnie tego próbowałem się dowiedzieć.</p> <p>w witrynach, w których pracowałem, wszelkie zmiany, które należy wprowadzić w instancjach produkcyjnych, muszą być skryptowane jako skrypty zmian, które będą działać w sql * plus; ponadto skrypty potrzebne do odtworzenia od podstaw wszystkich obiektów schematu muszą być aktualizowane. wszystkie te skrypty są sprawdzane pod kątem kontroli zmian i stamtąd migrowane.</p><p>możesz kontrolować zmiany ddl lub używać wyzwalaczy ddl, aby wykrywać zmiany, a nawet używać oprogramowania różnicowego do porównywania dwóch wystąpień, ale metody te są niedyskryminujące; często programista wprowadza i cofa wiele zmian w schemacie (np. małe zmiany testowe, tworzenie fałszywych tabel do testowania koncepcji itp.) przed ustaleniem, co dokładnie należy zmienić.</p> za pomocą php, mysql, jakiegoś programu graficznego albo za pomocą flash + actionscript. w jednym zdaniu nie da się tego wytumaczyć gdyż jest to zbyt skomplikowane. ale możesz się zaopatrzyć w kurs php/mysql i flash. kursy są dostępne w internecie, na allego, albo w księgarniach w formie ksiązek <p>postgres ma bardzo elastyczną obsługę <a href="http://www.postgresql.org/docs/current/static/arrays.html">tablice</a> i <a href="http://www.postgresql.org/docs/current/static/rowtypes.html">typy złożone</a> . może to być coś, co próbujesz zrobić:</p><blockquote> <pre><code>create type my\_type as (val1 integer, val2 integer); </code></pre></blockquote><blockquote> <pre><code>create function my\_function(arr my\_type[]) returns text language plpgsql as $$ begin return arr::text; end;$$; </code></pre></blockquote><blockquote> <pre><code>select my\_function(array[row(1,2),row(3,4)]::my\_type[]); </code></pre> <pre> | moja\_funkcja | | :  <a href="http://dbfiddle.uk/?rdbms=postgres\_9.4&amp;fiddle=207971f904ff986920e88a9cd76bcab6">| {„(1,2)”, „(3,4)”} | </pre></blockquote><p><em> dbfiddle  (tutaj</a> </em></p> <p>josh,</p><p>jest to bardzo częste zadanie dla wszystkich dba i poprawna odpowiedź nie jest taka sama dla każdego i dla każdego serwera. podobnie jak wiele innych rzeczy, zależy to od tego, czego potrzebujesz.</p><p>zdecydowanie nie chcesz uruchamiać „shrink database”, jak już sugerowano. jego zło do wydajności, a poniżej odniesienie pokaże ci dlaczego. powoduje to fragmentację dysku i indeksów, co może prowadzić do problemów z wydajnością. lepiej jest, jeśli wstępnie przydzielisz duży rozmiar danych i plików dziennika, aby automatyczne uruchamianie nie uruchomiło się.</p><p>nie zrozumiałem twojego nr 2. pełna kopia zapasowa wybranych tabel. czy możesz rozwinąć więcej na ten temat?</p><p>przychodząc do reorganizacji indeksu, aktualizacji statystyk i przebudowy indeksu, musisz uważać na to, jak to zrobisz, w przeciwnym razie skończy się to na użyciu większej ilości zasobów, a także na problemach z wydajnością.</p><p>po przebudowaniu indeksów statystyki indeksów są aktualizowane za pomocą fullscan, ale jeśli później zaktualizujesz statystyki, zostaną one ponownie zaktualizowane z domyślną próbką (która zależy od kilku czynników, zwykle 5% tabeli, gdy rozmiar tabeli&gt; 8 mb), co może prowadzić do problemów z wydajnością. w zależności od posiadanej edycji może być możliwe przebudowywanie indeksu online. właściwym sposobem wykonywania tej czynności jest sprawdzenie stopnia fragmentacji i w zależności od tego albo przebuduj indeks, albo zreorganizuj indeks + zaktualizuj statystyki. możesz także określić, które tabele wymagają częstszej aktualizacji statystyk i próbować częściej aktualizować statystyki.</p><p>plany konserwacji są w porządku, ale trudno jest uzyskać z nich jak najwięcej, wykonując te dostosowania, chyba że możesz zalogować się do ssis i poprawić mp. dlatego wolę nie używać ich i używać <a href="https://ola.hallengren.com">darmowe skrypty oli hallengren</a> , które są bardziej niezawodne niż mp. poleciłbym również nadrobić zaległości w artykule paula randala na ten temat.</p><p>ref: <a href="http://technet.microsoft.com/en-us/magazine/2008.08.database.aspx">http://technet.microsoft.com/en-us/magazine/2008.08.08.database.aspx</a> </p><p>to nie jest wyczerpująca odpowiedź na twoje pytanie, ale dobry punkt wyjścia. hth i daj nam znać, jeśli masz dodatkowe pytania/komentarze.</p> <p>istnieje <a href="http://www.navicat.com/en/products/navicat\_pgsql/pgsql\_overview.html">navicat dla postgresql</a> i inne platformy baz danych.</p><p>ma darmową wersję lite i wersję komercyjną.</p> <p>te widoki są pomocne w pracy z łączami db w oracle:</p><ul> <li>dba\_db\_links - wszystkie łącza db zdefiniowane w bazie danych</li> <li>all\_db\_links - wszystkie łącza db, do których bieżący użytkownik ma dostęp</li> <li>user\_db\_links - wszystkie łącza db będące własnością bieżącego użytkownika</li> </ul><p>zobacz więcej w <a href="http://docs.oracle.com/cd/b19306\_01/server.102/b14237/statviews\_1039.htm#refrn20050">dokumentacja oracle</a> </p>