{"id":83649,"date":"2020-06-02T07:42:21","date_gmt":"2020-06-02T05:42:21","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/database-as-sode-experience"},"modified":"2020-06-02T07:42:21","modified_gmt":"2020-06-02T05:42:21","slug":"database-as-sode-experience","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/database-as-sode-experience","title":{"rendered":"\u201eDatabase as Code\u201d iskustvo","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u201eDatabase as Code\u201d iskustvo\" src=\"\/wp-content\/uploads\/2020\/06\/a1ac23deeded97559fbe787ed09184a5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>SQL, kaj bi lahko bilo la\u017eje? Vsak od nas lahko napi\u0161e preprost poizvedbo \u2014 vnesemo <strong><em>select<\/em><\/strong>, na\u0161teli potrebne stolpce, nato <strong><em>from<\/em><\/strong>, ime tabele, nekaj pogojev v <strong><em>kjer<\/em><\/strong> in to je to \u2014 koristni podatki so v na\u0161ih rokah, skoraj ne glede na to, katera DBMS trenutno deluje v ozadju (ali pa morda <noindex><a rel=\"nofollow\" href=\"https:\/\/osquery.io\/\">sploh ni DBMS<\/a><\/noindex>). \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441 \u043b\u044e\u0431\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 (\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c) \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 (\u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0432\u044b\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u043c\u0438 \u2014 version control, code review, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437, \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b \u0438 \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u0441\u0435). \u0418 \u044d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0445\u0435\u043c \u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0439, \u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435\u0439 \u0436\u0438\u0437\u043d\u0435\u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0411\u0414 \u043f\u043e\u0434 \u043f\u0440\u0438\u0446\u0435\u043b\u043e\u043c &quot;database as code&quot;.<\/p>\n<p><\/p>\n<p>In za\u010deli bomo naravnost z <noindex><a rel=\"nofollow\" href=\"https:\/\/www.yegor256.com\/2014\/12\/01\/orm-offensive-anti-pattern.html\">ORM<\/a><\/noindex>. \u041f\u0435\u0440\u0432\u044b\u0435 \u0431\u0430\u0442\u043b\u044b \u0432\u0438\u0434\u0430 &quot;SQL vs ORM&quot; \u0431\u044b\u043b\u0438 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u044b \u0435\u0449\u0435 \u0432 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.sql.ru\/forum\/904343\/orm-vs-sql\">predpetrovskem \u010dasu<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h5 id=\"obektno-relyacionnyy-maping\">Objektno-relacijsko mapiranje<\/h5>\n<p><\/p>\n<p>Podporniki ORM tradicionalno cenijo hitrost in enostavnost razvoja, neodvisnost od DBMS in \u010distost kode. Za mnoge od nas koda za delo z bazami podatkov (in pogosto tudi sama baza podatkov)<\/p>\n<p><\/p>\n<p>                        <b class=\"spoiler_title\">\u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a&#8230;<\/b><\/p>\n<pre><code class=\"java\">@Entity\n@Table(name = &quot;stock&quot;, catalog = &quot;maindb&quot;, uniqueConstraints = {\n        @UniqueConstraint(columnNames = &quot;STOCK_NAME&quot;),\n        @UniqueConstraint(columnNames = &quot;STOCK_CODE&quot;) })\npublic class Stock implements java.io.Serializable {\n\n    @Id\n    @GeneratedValue(strategy = IDENTITY)\n    @Column(name = &quot;STOCK_ID&quot;, unique = true, nullable = false)\n    public Integer getStockId() {\n        return this.stockId;\n    }\n  ...<\/code><\/pre>\n<p><\/p>\n<p>Model je obdarjen z pametnimi anotacijami, nekje v ozadju pa \u010dastitljivi ORM generira in izvaja tone nekega SQL-kode. Mimogrede, razvijalci si z vsemi mo\u010dmi prizadevajo, da bi se od svoje baze podatkov za\u0161\u010ditili s kilometri abstrakcij, kar ka\u017ee na dolo\u010deno <noindex><a rel=\"nofollow\" href=\"https:\/\/www.sql.ru\/forum\/1303231\/prichiny-nenavisti-k-yazyku-sql\">&quot;SQL \u043d\u0435\u043d\u0430\u0432\u0438\u0441\u0442\u0438&quot;<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>\u041f\u043e \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0431\u0430\u0440\u0440\u0438\u043a\u0430\u0434 \u043f\u0440\u0438\u0432\u0435\u0440\u0436\u0435\u043d\u0446\u044b \u0447\u0438\u0441\u0442\u043e\u0433\u043e &quot;handmade&quot;-SQL \u043e\u0442\u043c\u0435\u0447\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0436\u0438\u043c\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u043a\u0438 \u0438\u0437 \u0441\u0432\u043e\u0435\u0439 \u0421\u0423\u0411\u0414 \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0441\u043b\u043e\u0435\u043a \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f &quot;data-centric&quot; \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0433\u0434\u0435 \u0431\u0430\u0437\u043e\u0439 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043b\u044e\u0434\u0438 (\u043e\u043d\u0438 \u0436\u0435 &quot;\u0431\u0430\u0437\u0438\u0441\u0442\u044b&quot;, \u043e\u043d\u0438 \u0436\u0435 &quot;\u0431\u0430\u0437\u043e\u0432\u0438\u043a\u0438&quot;, \u043e\u043d\u0438 \u0436\u0435 &quot;\u0431\u0430\u0437\u0434\u0435\u043d\u044c\u0449\u0438\u043a\u0438&quot; \u0438 \u0442.\u0434.), \u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f &quot;\u0434\u0435\u0440\u0433\u0430\u0442\u044c&quot; \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0432\u044c\u044e\u0445\u0438 \u0438 \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043a\u0438, \u043d\u0435 \u0432\u0434\u0430\u0432\u0430\u044f\u0441\u044c \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p><\/p>\n<p>Kaj pa, \u010de bi vzeli najbolj\u0161e iz obeh svetov? Kako je to izvedeno v \u010dudovitem orodju z \u017eivljenjskim imenom <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/krisajenkins\/yesql\">Yesql<\/a><\/noindex>. Navedel bom nekaj vrstic iz splo\u0161ne koncepcije v mojem svobodnem prevodu, podrobneje pa se z njo lahko seznanite <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/krisajenkins\/yesql#rationale\">ovde<\/a><\/noindex>.<\/p>\n<p><\/p>\n<blockquote><p>Clojure \u044d\u0442\u043e \u043a\u0440\u0443\u0442\u043e\u0439 \u044f\u0437\u044b\u043a \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f DSL&#8217;\u0435\u0439, \u043d\u043e SQL \u0443\u0436\u0435 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0440\u0443\u0442\u044b\u043c DSL, \u0438 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0435\u0449\u0435 \u043e\u0434\u0438\u043d. S-\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043e\u043d\u0438 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043a\u043e\u0431\u043a\u0438 \u0440\u0430\u0434\u0438 \u0441\u043a\u043e\u0431\u043e\u043a. \u041d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u044b? \u0422\u043e\u0433\u0434\u0430 \u0434\u043e\u0436\u0434\u0438\u0442\u0435\u0441\u044c \u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u0433\u0434\u0430 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u043d\u0430\u0434 \u0411\u0414 \u0434\u0430\u0441\u0442 \u0442\u0435\u0447\u044c, \u0438 \u0432\u044b \u043d\u0430\u0447\u043d\u0435\u0442\u0435 \u0431\u043e\u0440\u044c\u0431\u0443 \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <em>(raw-sql)<\/em><\/p>\n<p>\u0418 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u043c SQL \u043e\u0431\u044b\u0447\u043d\u044b\u043c SQL&#8217;\u0435\u043c \u2014 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b \u043d\u0430 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441:<\/p><\/blockquote>\n<p><\/p>\n<pre><code class=\"sql\">-- name: users-by-country\nselect *\n  from users\n where country_code = :country_code<\/code><\/pre>\n<p><\/p>\n<blockquote><p>\u2026 i zatim pro\u010ditajte ovu datoteku, pretvaraju\u0107i je u obi\u010dnu Clojure funkciju:<\/p><\/blockquote>\n<p><\/p>\n<pre><code class=\"lisp\">(defqueries &quot;some\/where\/users_by_country.sql&quot;\n   {:connection db-spec})\n\n;;; A function with the name `users-by-country` has been created.\n;;; Let's use it:\n(users-by-country {:country_code &quot;GB&quot;})\n;=&gt; ({:name &quot;Kris&quot; :country_code &quot;GB&quot; ...} ...)<\/code><\/pre>\n<p><\/p>\n<blockquote><p>\u041f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044f\u0441\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 &quot;SQL \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, Clojure \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e&quot;, \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435:<\/p>\n<ul>\n<li>Nema sintakti\u010dkih iznena\u0111enja. Va\u0161a baza podataka (kao i svaka druga) ne odgovara SQL standardu 100% \u2014 ali za Yesql to nije va\u017eno. Nikada ne\u0107ete tro\u0161iti vreme na lov na funkcije \u010dija je sintaksa ekvivalentna SQL-u. Nikada se ne\u0107ete vra\u0107ati funkciji <em>(raw-sql &quot;some (&#8216;funky&#8217; :: SYNTAX)&quot;))<\/em>.<\/li>\n<li>Najbolja podr\u0161ka uredniku. Va\u0161 urednik ve\u0107 ima odli\u010dnu podr\u0161ku za SQL. Odr\u017eavaju\u0107i SQL kao SQL, jednostavno ga mo\u017eete koristiti.<\/li>\n<li>Kompatibilnost za timsku saradnju. Va\u0161i DBA mogu \u010ditati i pisati SQL koji koristite u svom Clojure projektu.<\/li>\n<li>Jednostavnija optimizacija performansi. Treba da izradite plan za problemati\u010dan upit? Nema problema kada je va\u0161 upit obi\u010dan SQL.<\/li>\n<li>Ponovna upotreba upita. Premestite te iste SQL datoteke u druge projekte, zato \u0161to je to jednostavni stari dobri SQL \u2014 samo podelite.<\/li>\n<\/ul>\n<p>\n<\/p><\/blockquote>\n<p>Po mom mi\u0161ljenju, ideja je veoma cool i istovremeno vrlo jednostavna, \u0161to je projektu donelo mnogo <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/krisajenkins\/yesql#other-languages\">sledbenika<\/a><\/noindex> na razli\u010ditim jezicima. A mi \u0107emo dalje poku\u0161ati primeniti sli\u010dnu filozofiju razdvajanja SQL koda od svega ostalog daleko van ORM-a.<\/p>\n<p><\/p>\n<h5 id=\"ide--db-menedzhery\">IDE &amp; DB-upravitelji<\/h5>\n<p><\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u0427\u0430\u0441\u0442\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 \u0411\u0414, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0439\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432 \u0441\u0445\u0435\u043c\u0435 \u0438 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0435\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 (\u043a\u0430\u043a\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043a\u043e\u043b\u043e\u043d\u043a\u0438, \u043a\u043b\u044e\u0447\u0438, \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u043a\u043e\u043d\u0441\u0442\u0440\u0435\u0439\u043d\u0442\u044b \u0438 \u043f\u0440\u043e\u0447\u0435\u0435). \u0418 \u043e\u0442 \u043b\u044e\u0431\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 IDE \u0438\u043b\u0438 \u043c\u0430\u043b\u043e\u043c\u0430\u043b\u044c\u0441\u043a\u043e\u0433\u043e DB-manager&#8217;\u0430, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043c\u044b \u0436\u0434\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439. \u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0436\u0434\u0430\u0442\u044c \u043f\u043e \u043f\u043e\u043b\u0447\u0430\u0441\u0430, \u043f\u043e\u043a\u0430 \u043d\u0430\u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u043e\u043a\u043e\u0448\u043a\u043e \u0441 \u043d\u0443\u0436\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u0441 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u0411\u0414), \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u0441\u0432\u0435\u0436\u0435\u0439 \u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439, \u0430 \u043d\u0435 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u0442\u0430\u0440\u044c\u0435. \u041f\u0440\u0438\u0447\u0435\u043c \u0447\u0435\u043c \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0438 \u043a\u0440\u0443\u043f\u043d\u0435\u0435 \u0411\u0414 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0442\u0435\u043c \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<p><\/p>\n<p>\u041d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u044f \u0437\u0430\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e \u043c\u044b\u0448\u044c \u043a\u0443\u0434\u0430 \u043f\u043e\u0434\u0430\u043b\u044c\u0448\u0435 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0438\u0448\u0443 \u043a\u043e\u0434. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (\u0438 \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438) \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0445\u0435\u043c\u0435 &quot;HR&quot;. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0421\u0423\u0411\u0414 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u043d\u0435\u0445\u0438\u0442\u0440\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0438\u0437 information_schema:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">select table_name\n     , ...\n  from information_schema.tables\n where schema = 'HR'<\/code><\/pre>\n<p><\/p>\n<p>V razli\u010dnih bazah se vsebina tak\u0161nih tabel-imenikov razlikuje glede na zmo\u017enosti posameznih sistemov za upravljanje baz podatkov. Na primer, za MySQL je iz tega istega imenika mogo\u010de pridobiti specifi\u010dne za ta sistem parametre tabele:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">select table_name\n     , storage_engine -- \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 &quot;\u0434\u0432\u0438\u0436\u043e\u043a&quot; (&quot;MyISAM&quot;, &quot;InnoDB&quot; etc)\n     , row_format     -- \u0424\u043e\u0440\u043c\u0430\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 (&quot;Fixed&quot;, &quot;Dynamic&quot; etc)\n     , ...\n  from information_schema.tables\n where schema = 'HR'<\/code><\/pre>\n<p><\/p>\n<p>Oracle ne podpira information_schema, a ima <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Oracle_metadata\">Oracle metadata<\/a><\/noindex>, in ni ve\u010djih te\u017eav:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">select table_name\n     , pct_free       -- Minimalen dele\u017e prostega prostora v podatkovnem bloku (%)\n     , pct_used       -- Minimalen dele\u017e uporabljenega prostora v podatkovnem bloku (%)\n     , last_analyzed  -- Datum zadnjega zbiranja statistike\n     , ...\n  from all_tables\n where owner = 'HR'<\/code><\/pre>\n<p><\/p>\n<p>Tudi ClickHouse ni izjema:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">select name\n     , engine -- \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 &quot;\u0434\u0432\u0438\u0436\u043e\u043a&quot; (&quot;MergeTree&quot;, &quot;Dictionary&quot; etc)\n     , ...\n  from system.tables\n where database = 'HR'<\/code><\/pre>\n<p><\/p>\n<p>\u0427\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u0432 Cassandra (\u0433\u0434\u0435 \u0435\u0441\u0442\u044c columnfamilies \u0432\u043c\u0435\u0441\u0442\u043e tables \u0438 keyspace&#8217;\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0445\u0435\u043c):<\/p>\n<p><\/p>\n<pre><code class=\"sql\">select columnfamily_name\n     , compaction_strategy_class  -- Strategija zbiranja odpadkov\n     , gc_grace_seconds           -- \u010cas \u017eivljenja odpadkov\n     , ...\n  from system.schema_columnfamilies\n where keyspace_name = 'HR'<\/code><\/pre>\n<p><\/p>\n<p>Za ve\u010dino drugih baz podatkov je prav tako mogo\u010de oblikovati podobne poizvedbe (tudi v Mongu obstaja <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/system-collections\/#%3Cdatabase%3E.system.namespaces\">posebna sistemska zbirka<\/a><\/noindex>, ki vsebuje informacije o vseh zbirkah v sistemu).<\/p>\n<p><\/p>\n<p>\u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u0442\u0430\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445, \u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e \u043b\u044e\u0431\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435. \u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u0431\u0440\u044b\u0435 \u043b\u044e\u0434\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0411\u0414, \u043a\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u0435\u0440\u0438\u0438 \u0445\u0430\u0431\u0440\u0430-\u0441\u0442\u0430\u0442\u0435\u0439 &quot;\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 PostgreSQL&quot; (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/post\/415575\">aib<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/post\/415897\">ben<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/post\/418597\">gim<\/a><\/noindex>). \u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u0441\u044e \u044d\u0442\u0443 \u0433\u043e\u0440\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043d\u0430\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0445 \u2014 \u044d\u0442\u043e &quot;\u0442\u0430\u043a\u043e\u0435 \u0441\u0435\u0431\u0435&quot; \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043b\u044e\u0431\u0438\u043c\u043e\u0439 IDE\/\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0438 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d.<\/p>\n<p><\/p>\n<p>Na koncu je tak na\u010din navigacije in iskanja objektov veliko bolj fleksibilen, prihrani veliko \u010dasa in omogo\u010da pridobivanje to\u010dno tistih informacij in v tisti obliki, kot je trenutno potrebno (kot je opisano v objavi <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/JetBrains\/blog\/342094\">&quot;\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0411\u0414 \u0432 \u043b\u044e\u0431\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435: \u0447\u0442\u043e \u0443\u043c\u0435\u044e\u0442 IDE \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 IntelliJ&quot;<\/a><\/noindex>).<\/p>\n<p><\/p>\n<h5 id=\"operacii-s-obektami\">Operacije z objekti<\/h5>\n<p><\/p>\n<p>Potem ko smo na\u0161li in prou\u010dili potrebne objekte, je pravi \u010das, da z njimi storimo nekaj koristnega. Seveda, brez pretrganja prstov s tipkovnice.<\/p>\n<p><\/p>\n<p>Ni skrivnost, da bo preprosto brisanje tabele izgledalo enako skoraj v vseh DB:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">drop table hr.persons<\/code><\/pre>\n<p><\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0443\u0436\u0435 \u043f\u043e\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u044e\u0431\u0430\u044f \u0421\u0423\u0411\u0414 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 NoSQL) \u0432 \u0442\u043e\u043c \u0438\u043b\u0438 \u0438\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0443\u043c\u0435\u0435\u0442 &quot;create table&quot;, \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u043c\u0430\u043b\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f (\u0438\u043c\u044f, \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043b\u043e\u043d\u043e\u043a, \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445), \u043d\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0438 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0421\u0423\u0411\u0414. \u041c\u043e\u0439 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Oracle \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0438 &quot;\u0433\u043e\u043b\u044b\u0435&quot; \u0411\u041d\u0424&#8217;\u044b \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 &quot;create table&quot; <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/19\/sqlrf\/sql-language-reference.pdf\">zasede 31 strani<\/a><\/noindex>. Drugi DBMS-i imajo bolj skromne mo\u017enosti, toda vsak od njih ima tudi \u0161tevilne zanimive in edinstvene funkcionalnosti za ustvarjanje tabel (<noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/static\/sql-createtable.html\">postgres<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/create-table.html\">mysql<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.cockroachlabs.com\/docs\/stable\/create-table.html#expanded\">cockroach<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.datastax.com\/en\/cql\/3.3\/cql\/cql_reference\/cqlCreateTable.html\">cassandra<\/a><\/noindex>). \u0412\u0440\u044f\u0434 \u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 &quot;wizard&quot; \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 IDE (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0439) \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438, \u0430 \u0435\u0441\u043b\u0438 \u0438 \u0441\u043c\u043e\u0436\u0435\u0442, \u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0440\u0435\u043b\u0438\u0449\u0435 \u043d\u0435 \u0434\u043b\u044f \u0441\u043b\u0430\u0431\u043e\u043d\u0435\u0440\u0432\u043d\u044b\u0445. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438 \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <strong><em>create table<\/em><\/strong> vam bo omogo\u010dil, da brez te\u017eav izkoristite vse te mo\u017enosti, kar bo va\u0161im podatkom omogo\u010dilo zanesljivo, optimalno in maksimalno udobno shranjevanje in dostop.<\/p>\n<p><\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0421\u0423\u0411\u0414 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0421\u0423\u0411\u0414. \u041f\u0440\u0438\u0447\u0435\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0434 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0411\u0414, \u043d\u043e \u0438 \u043d\u0430\u0434 \u0441\u0430\u043c\u043e\u0439 \u0421\u0423\u0411\u0414, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 &quot;\u0443\u0431\u0438\u0442\u044c&quot; \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u043b\u0438\u0431\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438, \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0443, \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0440\u0435\u0436\u0438\u043c &quot;read only&quot; \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<p><\/p>\n<h5 id=\"a-teper-nemnogo-porisuem\">Zdaj pa malo nari\u0161imo<\/h5>\n<p><\/p>\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u2014 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0411\u0414, \u043d\u0430 \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438. \u042d\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u044e\u0431\u0430\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f IDE, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u00abcommand line\u00bb-\u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0443\u043b\u044b \u0438 \u043c\u043e\u0434\u0435\u043b\u043b\u0435\u0440\u044b. \u041a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u043c \u0447\u0442\u043e-\u0442\u043e \u043d\u0430\u0440\u0438\u0441\u0443\u044e\u0442 &quot;\u043a\u0430\u043a \u0443\u043c\u0435\u044e\u0442&quot;, \u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0438\u043b\u0438 \u0433\u0430\u043b\u043e\u0447\u0435\u043a \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435.<\/p>\n<p><\/p>\n<p>Toda to te\u017eavo lahko re\u0161imo mnogo preprosteje, bolj fleksibilno in elegantno, seveda pa s pomo\u010djo kode. Za gradnjo diagramov katerekoli zapletenosti imamo na voljo ve\u010d specializiranih ozna\u010devalnih jezikov (DOT, GraphML itd.), za njih pa cela vrsta aplikacij (GraphViz, PlantUML, Mermaid), ki znajo brati tak\u0161ne navodila in vizualizirati v najrazli\u010dnej\u0161ih formatih. Informacije o objektih in povezavah med njimi pa \u017ee vemo, kako pridobiti.<\/p>\n<p><\/p>\n<p>Poglejmo si majhen primer, kako bi to lahko izgledalo, z uporabo PlantUML in <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/316428\/\">demonstracijske baze podatkov za PostgreSQL<\/a><\/noindex> (levo SQL poizvedba, ki bo generirala potrebno navodilo za PlantUML, desno pa rezultat):<\/p>\n<p>\n<img decoding=\"async\" alt=\"\u201eDatabase as Code\u201d iskustvo\" src=\"\/wp-content\/uploads\/2020\/06\/c5cb2a138df1527abe47cbf8d695cb36.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<pre><code class=\"sql\">select '@startuml'||chr(10)||'hide methods'||chr(10)||'hide stereotypes' union all\nselect distinct ccu.table_name || ' --|&gt; ' ||\n       tc.table_name as val\n  from table_constraints as tc\n  join key_column_usage as kcu\n    on tc.constraint_name = kcu.constraint_name\n  join constraint_column_usage as ccu\n    on ccu.constraint_name = tc.constraint_name\n where tc.constraint_type = 'FOREIGN KEY'\n   and tc.table_name ~ '.*' union all\nselect '@enduml'<\/code><\/pre>\n<p><\/p>\n<p>In \u010de se nekoliko potrudimo, lahko na podlagi <noindex><a rel=\"nofollow\" href=\"https:\/\/gist.github.com\/QuantumGhost\/0955a45383a0b6c0bc24f9654b3cb561\">ER predloge za PlantUML<\/a><\/noindex> dobimo nekaj mo\u010dno podobnega pravi ER diagramu:<\/p>\n<p><\/p>\n<p>                        <b class=\"spoiler_title\">SQL poizvedbo je nekoliko bolj zapletena<\/b><\/p>\n<pre><code class=\"sql\">-- Glava\nselect &#039;@startuml\n        !define Table(name,desc) class name as &quot;desc&quot; &lt;&lt; (T,#FFAAAA) &gt;&amp;gt;\n        !define primary_key(x) &lt;b&gt;x&lt;\/b&gt;\n        !define unique(x) &lt;color:green&gt;x&lt;\/color&gt;\n        !define not_null(x) &lt;u&gt;x&lt;\/u&gt;\n        hide methods\n        hide stereotypes&#039;\n union all\n-- Tabele\nselect format(&#039;Table(%s, &quot;%s n informacije o %s&quot;) {&#039;||chr(10), table_name, table_name, table_name) ||\n       (select string_agg(column_name || &#039; &#039; || upper(udt_name), chr(10))\n          from information_schema.columns\n         where table_schema = &#039;public&#039;\n           and table_name = t.table_name) || chr(10) || &#039;}&#039;\n  from information_schema.tables t\n where table_schema = &#039;public&#039;\n union all\n-- Veze izme\u0111u tabela\nselect distinct ccu.table_name || &#039; &quot;1&quot; --&amp;gt; &quot;0..N&quot; &#039; || tc.table_name || format(&#039; : &quot;A %s mo\u017ee imati mnogo %s&quot;&#039;, ccu.table_name, tc.table_name)\n  from information_schema.table_constraints as tc\n  join information_schema.key_column_usage as kcu on tc.constraint_name = kcu.constraint_name\n  join information_schema.constraint_column_usage as ccu on ccu.constraint_name = tc.constraint_name\n where tc.constraint_type = &#039;FOREIGN KEY&#039;\n   and ccu.constraint_schema = &#039;public&#039;\n   and tc.table_name ~ &#039;.*&#039;\n union all\n-- Podno\u017eje\nselect &#039;@enduml&#039;<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"\u201eDatabase as Code\u201d iskustvo\" src=\"\/wp-content\/uploads\/2020\/06\/bd45420a4fd1bdfcf20cbe74a0638c7b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u010ce se natan\u010dno pogledamo, mnoge vizualizacijske orodja pod pokrovom uporabljajo podobne poizvedbe. Res je, da so te poizvedbe obi\u010dajno globoko <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pgmodeler\/pgmodeler\/blob\/9c615c0b0871df3cd649983ce61e802b0ff0137b\/schemas\/catalog\/table.sch\">&quot;\u0437\u0430\u0448\u0438\u0442\u044b&quot; \u0432 \u043a\u043e\u0434 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0441\u043b\u043e\u0436\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f<\/a><\/noindex>, kaj \u0161ele da bi jih modificirali.<\/p>\n<p><\/p>\n<h5 id=\"metriki-i-monitoring\">Metri\u010dne in nadzor<\/h5>\n<p><\/p>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0442\u0435\u043c\u0435 \u2014 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0411\u0414. \u0412\u0441\u043f\u043e\u043c\u043d\u044e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e true story, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u043c\u043d\u0435 &quot;\u043e\u0434\u043d\u0438\u043c \u043c\u043e\u0438\u043c \u0434\u0440\u0443\u0433\u043e\u043c&quot;. \u041d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0436\u0438\u043b-\u0431\u044b\u043b \u043d\u0435\u043a\u0438\u0439 \u043c\u043e\u0433\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 DBA, \u0438 \u043c\u0430\u043b\u043e \u043a\u0442\u043e \u0438\u0437 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0431\u044b\u043b \u0441 \u043d\u0438\u043c \u0437\u043d\u0430\u043a\u043e\u043c \u043b\u0438\u0447\u043d\u043e, \u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0438\u0434\u0435\u043b \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0435\u0433\u043e \u0432 \u0433\u043b\u0430\u0437\u0430 (\u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0442\u0440\u0443\u0434\u0438\u043b\u0441\u044f \u043e\u043d, \u043f\u043e \u0441\u043b\u0443\u0445\u0430\u043c, \u0433\u0434\u0435-\u0442\u043e \u0432 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u043c \u043a\u043e\u0440\u043f\u0443\u0441\u0435). \u0412 \u0447\u0430\u0441 &quot;X&quot;, \u043a\u043e\u0433\u0434\u0430 poduction-\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u0440\u0443\u043f\u043d\u043e\u0433\u043e \u0440\u0435\u0442\u0435\u0439\u043b\u0435\u0440\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0430 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 &quot;\u043f\u043b\u043e\u0445\u043e \u0441\u0435\u0431\u044f \u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c&quot;, \u043e\u043d \u043c\u043e\u043b\u0447\u0430 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u043b \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0438\u0437 \u043e\u0440\u0430\u043a\u043b\u043e\u0432\u043e\u0433\u043e Enterprise Manager, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0435\u0440\u0435\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u043b \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u043a\u0440\u0430\u0441\u043d\u044b\u043c \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u043c \u0434\u043b\u044f &quot;\u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0441\u0442\u0438&quot; (\u044d\u0442\u043e, \u043c\u044f\u0433\u043a\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043c\u0430\u043b\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u043b\u043e). \u0418 \u0432\u043e\u0442 \u043f\u043e \u044d\u0442\u043e\u0439 &quot;\u0444\u043e\u0442\u043e\u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0435&quot; \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043b\u0435\u0447\u0438\u0442\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0440\u0430\u0433\u043e\u0446\u0435\u043d\u043d\u043e\u043c\u0443 (\u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043c\u044b\u0441\u043b\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430) Enterprise Manager \u043d\u0438 \u0443 \u043a\u043e\u0433\u043e \u043d\u0435 \u0431\u044b\u043b\u043e, \u0442.\u043a. \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0438 \u0434\u043e\u0440\u043e\u0433\u0430\u044f, \u0432\u0434\u0440\u0443\u0433 &quot;\u0440\u0430\u0437\u0440\u0430\u0431\u044b \u0447\u0435\u0433\u043e-\u043d\u0438\u0442\u044c \u043d\u0430\u0442\u044b\u043a\u0430\u044e\u0442 \u0438 \u0432\u0441\u0435 \u043f\u043e\u043b\u043e\u043c\u0430\u044e\u0442&quot;. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 &quot;\u044d\u043c\u043f\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c&quot; \u043f\u0443\u0442\u0435\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0438 \u043c\u0435\u0441\u0442\u043e \u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0442\u043e\u0440\u043c\u043e\u0437\u043e\u0432 \u0438 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u043b\u0438 \u043f\u0430\u0442\u0447. \u0415\u0441\u043b\u0438 \u0433\u0440\u043e\u0437\u043d\u043e\u0435 \u043f\u0438\u0441\u044c\u043c\u043e \u043e\u0442 DBA \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f, \u0442\u043e \u0432\u0441\u0435 \u0441 \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0434\u044b\u0445\u0430\u043b\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0438\u0441\u044c \u043a \u0441\u0432\u043e\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0437\u0430\u0434\u0430\u0447\u0430\u043c (\u0434\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u041f\u0438\u0441\u044c\u043c\u0430).<\/p>\n<p><\/p>\n<p>\u041d\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0441\u0435\u043b\u043e \u0438 \u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u043d\u043e, \u0430 \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445. \u0425\u043e\u0442\u044f \u0431\u044b \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c, \u043a\u0430\u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 (\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0438 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043d\u0435\u0437\u0430\u043c\u0435\u043d\u0438\u043c\u044b). \u041b\u044e\u0431\u0430\u044f \u0421\u0423\u0411\u0414 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0431\u0435\u0437\u0432\u043e\u0437\u043c\u0435\u0437\u0434\u043d\u043e \u0433\u043e\u0442\u043e\u0432\u0430 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u0441\u0432\u043e\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0412 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0430\u043c\u043e\u0439 &quot;\u043a\u0440\u043e\u0432\u0430\u0432\u043e\u0439&quot; Oracle DB \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u044e\u0431\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0438 \u0441\u0435\u0441\u0441\u0438\u0439 \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0431\u0443\u0444\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u0435\u0448\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <noindex><a rel=\"nofollow\" href=\"https:\/\/oracle-base.com\/dba\/scripts\">DBA Skripti<\/a><\/noindex>, \u0440\u0430\u0437\u0434\u0435\u043b &quot;Monitoring&quot;). \u0412 Postgresql \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0446\u0435\u043b\u0430\u044f \u0440\u043e\u0441\u0441\u044b\u043f\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0434\u043b\u044f <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/static\/monitoring-stats.html\">spremljanje delovanja DB<\/a><\/noindex>, vklju\u010dno z nekaterimi nadvse pomembnimi v vsakdanjem \u017eivljenju vsakega DBA, kot so <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/static\/monitoring-stats.html#PG-STAT-ACTIVITY-VIEW\">pg_stat_activity<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/static\/monitoring-stats.html#PG-STAT-DATABASE-VIEW\">pg_stat_database<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/static\/monitoring-stats.html#PG-STAT-BGWRITER-VIEW\">pg_stat_bgwriter<\/a><\/noindex>. V MySQL je za to namenjena celo posebna shema <noindex><a rel=\"nofollow\" href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/performance-schema-table-descriptions.html\">performance_schema<\/a><\/noindex>. V Mongo pa je vgrajen <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/tutorial\/manage-the-database-profiler\/\">profilirnik<\/a><\/noindex> ki agregira podatke o zmogljivosti v sistemsko zbirko <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/tutorial\/manage-the-database-profiler\/#view-profiler-data\">system.profile<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Torej, opremljeni z nekim zbiralnikom metrik (Telegraf, Metricbeat, Collectd), ki zna izvajati prilagojene sql-poizvedbe, shrambo teh metrik (InfluxDB, Elasticsearch, Timescaledb) in vizualizatorjem (Grafana, Kibana), lahko ustvarimo dovolj preprost in prilagodljiv sistem za spremljanje, ki bo tesno integriran z drugimi splo\u0161nimi sistemi metrikami (ki jih pridobivamo, na primer, iz aplikacijskega stre\u017enika, iz operacijskega sistema itd.). Kot je to primer v pgwatch2, kjer se uporablja kombinacija InfluxDB + Grafana in niz poizvedb do sistemskih prikazov, ki jim lahko dodamo tudi prilagojene poizvedbe. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/cybertec-postgresql\/pgwatch2#adding-metrics\">dodati prilagojene poizvedbe<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h2 id=\"itogo\">Ukupno<\/h2>\n<p><\/p>\n<p>In to je le pribli\u017een seznam tistega, kar lahko storimo z na\u0161o bazo podatkov s pomo\u010djo obi\u010dajnega SQL-koda. Sem prepri\u010dan, da lahko najdemo \u0161e \u0161tevilne druge uporabe, pi\u0161ite v komentarjih. O tem, kako (in kar je najpomembnej\u0161e zakaj) to vse avtomatizirati in vklju\u010diti v svoj CI\/CD pipeline, bomo govorili naslednji\u010d.<\/p>\n<p>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/426833\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>SQL, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0449\u0435? \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u2014 \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u043c select, \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438, \u0437\u0430\u0442\u0435\u043c from, \u0438\u043c\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0432 where \u0438 \u0432\u0441\u0435 \u2014 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443 \u043d\u0430\u0441 \u0432 \u043a\u0430\u0440\u043c\u0430\u043d\u0435, \u043f\u0440\u0438\u0447\u0435\u043c (\u043f\u043e\u0447\u0442\u0438) \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e \u043a\u0430\u043a\u0430\u044f \u0421\u0423\u0411\u0414 \u0432 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c (\u0430 \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435 \u0421\u0423\u0411\u0414 \u0432\u043e\u0432\u0441\u0435). \u0412 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":83650,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-83649","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"SQL, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0449\u0435?\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/database-as-sode-experience\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u00abDatabase as \u0421ode\u00bb Experience | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"SQL, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0449\u0435?\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/database-as-sode-experience\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-06-02T05:42:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-02T05:42:21+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47\u00abDatabase as Code\u00bb Izku\u0161nja | ProHoster","description":"SQL, kaj bi lahko bilo la\u017ejega?","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/database-as-sode-experience","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u00abDatabase as \u0421ode\u00bb Experience | ProHoster","og:description":"SQL, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0449\u0435?","og:url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/database-as-sode-experience","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-06-02T05:42:21+00:00","article:modified_time":"2020-06-02T05:42:21+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"83649","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:13:28","updated":"2022-10-02 10:23:46","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/83649","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=83649"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/83649\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/83650"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=83649"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=83649"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=83649"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}