JavaRush /Java Blog /Random-TK /Bölüm 2. DBMS gurluşy, tablisalar we maglumatlar görnüşle...

Bölüm 2. DBMS gurluşy, tablisalar we maglumatlar görnüşleri

Toparda çap edildi
Birinji bölüm
Bölüm 2. DBMS gurluşy, tablisalar we maglumatlar görnüşleri - 1
Simpleönekeý bir exchangea emulýatorymyzy döretmäge dowam edýäris. Ine, näme ederis:
  • Maglumatlar bazasynyň guramasynyň diagrammasyny döredeliň.
  • Nämäniň, nädip we nirede saklanýandygyny düşündireris.
  • Maglumatlaryň biri-biri bilen nähili baglanyşýandygyny öwreneliň.
  • SQL esaslaryny SQL tablisasyny döretmek buýrugynyň mysalyny öwrenip başlalyň, SQL diliniň Maglumat kesgitleme dili ( DDL ).
  • Java programmasyny ýazmagy dowam etdireliň. DBMS-iň esasy funksiýalaryny JDBC we üç derejeli arhitektura ulanyp, maglumatlar bazamyzy programma taýdan döretmek üçin java.sql nukdaýnazaryndan ýerine ýetirýäris.
Bu iki bölek has göwrümli boldy, sebäbi SQL esaslary we içinden DBMS guramasy bilen tanyşmaly we Java bilen meňzeşlikleri çekmeli. Kod sanawlary bilen sizi gyzyklandyrmazlyk üçin, ahyrynda programma bilen degişli github ammaryna baglanyşyklar bar.

DBMS dizaýny

Programmanyň beýany

Maglumat saklamagy guramagyň programmirlemegiň aýrylmaz bölegidigini eýýäm eşitdiňiz. Programmamyzyň maksadynyň iň ýönekeý alyş-çalyş emulýasiýasydygyny ýatladýaryn:
  • Berlen düzgünlere laýyklykda söwda gününde gymmaty üýtgäp bilýän paýnamalar bar;
  • başlangyç maýasy bolan söwdagärler bar;
  • söwdagärler algoritmine görä paýlary satyn alyp we satyp bilerler.
Bir Thea belliklerde işleýär - kesgitlenen wagt (biziň ýagdaýymyzda - 1 minut). Teklip wagtynda aksiýa bahasy üýtgäp biler, soň söwdagär paý satyn alyp ýa-da satyp biler.

Emulýasiýa maglumatlarynyň gurluşy

Aýry-aýry alyş-çalyş guramalarynyň modellerine jaň edeliň. Tegelek ýalňyşlyklardan gaça durmak üçin synp arkaly maliýe mukdary bilen işläris BigDecimal(jikme-jiklikleri makalanyň soňundaky baglanyşykdan tapyp bilersiňiz). Her modeliň gurluşyny has jikme-jik suratlandyralyň: Mahabat:
Aýratynlyk Görnüşi Düşündiriş
name Srting Ady
changeProbability int Her bellikde göterim hökmünde nyrh üýtgemeginiň ähtimallygy
startPrice BigDecimal Başlangyç bahasy
delta int Häzirki bahanyň üýtgäp biljek göteriminde iň ýokary mukdar
Paýlaşmagyň bahasy:
Aýratynlyk Görnüşi Düşündiriş
operDate LocalDateTime Bahany kesgitlemek üçin wagt (bellik)
share Mahabat Mahabatlandyrma baglanyşygy
rate BigDecimal Paý bahasy
Söwdagär:
Aýratynlyk Görnüşi Düşündiriş
name Setir Bahany kesgitlemek üçin wagt (bellik)
sfreqTick int Geleşikleriň ýygylygy. Söwdaçy amallary ýerine ýetirýän döwür bilen kesgitlenýär
cash BigDecimal Paýlardan başga pul mukdary
traidingMethod int Söwdagär tarapyndan ulanylýan algoritm. Hemişelik san hökmünde belläliň, algoritmiň ýerine ýetirilmegi Java kodunda (indiki bölümlerde) bolar
changeProbability int Amaly tamamlamak ähtimallygy, göterim
about Setir Her bellikde göterim derejesinde göterim üýtgemegi ähtimallygy
Söwdaçylaryň hereketleri:
Aýratynlyk Görnüşi Düşündiriş
operation int Geleşik görnüşi (satyn almak ýa-da satmak)
traider Söwdagär Söwdaçy baglanyşygy
shareRate Paý bahasy Bir stockanyň bahasyna baglanyşyk (degişlilikde paýnamanyň özi, bahasy we berlen wagty)
amount Uzyn Geleşige gatnaşýan paýnamalaryň sany
Her modeliň özboluşlylygyny üpjün etmek üçin uzyn görnüşliid atribut goşarys . Bu atribut modelleriň içinde özboluşly bolar we ony özboluşly kesgitlär. Beýleki modellere salgylanýan sypatlar (söwdagär, bir stocka, paýnamanyň bahasy) degişli modeli özboluşly kesgitlemek üçin ony ulanyp biler. Bu maglumatlary degişli model nirede saklamak üçin ulanyp biljekdigimiz baradaky pikir derrew kellä gelýär . Şeýle-de bolsa, aşakdaky şertlerde muny kodda durmuşa geçirmäge synanyşyň: idMap<Long, Object>Object
  • maglumatlaryň ululygy elýeterli RAM-dan ep-esli ýokarydyr;
  • onlarça dürli ýerden maglumatlara garaşylýar;
  • maglumatlary bir wagtda üýtgetmek we okamak ukyby talap edilýär;
  • maglumatlaryň emele gelmegi we bitewiligi üçin düzgünleri üpjün etmek zerurdyr;
... we degişli kärleri we ýerine ýetirmek üçin wagt talap edýän meseleler bilen ýüzbe-ýüz bolarsyňyz. “Tigiri täzeden dikeltmegiň” zerurlygy ýok. Biziň üçin eýýäm köp zat oýlandy we ýazyldy. Şeýlelik bilen ýyllar boýy synagdan geçenleri ulanarys.

Java-da maglumatlary saklamak

Herekete seredeliň. Java-da bu model üçin belli bir Sharesynp döretdik name,,, . Köp paýlar açar her paý üçin özboluşly kesgitleýji bolup saklanýar .changeProbabilitystartPricedeltaMap<Long, Share>
public class Share {
    private String name;
    private BigDecimal startPrice;
    private int changeProbability;
    private int delta;
}
Map<Long, Share> shares = new HashMap<>();
shares.put(1L, new Share("ibm", BigDecimal.valueOf(20.0), 15, 10));
shares.put(2L, new Share("apple", BigDecimal.valueOf(14.0), 25, 15));
shares.put(3L, new Share("google", BigDecimal.valueOf(12.0), 20, 8));
...
shares.put(50L, new Share("microsoft", BigDecimal.valueOf(17.5), 10,4 ));
ID arkaly islenýän mahabata girmek üçin usuly ulanyň shares.get(id). Ady ýa-da bahasy boýunça aksiýa tapmak meselesi üçin, zerur ýazgylary gözleýän ähli ýazgylary gözden geçirerdik we ş.m. Emma başga ýoldan gidip, bahalary DBMS-de saklarys.

DBMS-de maglumat saklamak

DBMS üçin maglumatlary saklamagyň düzgünleriniň başlangyç toplumyny düzeliň:
  • DBMS-däki maglumatlar ýazgylar toplumy bolan tablisalara ( TABLE ) bölünýär .
  • Recordshli ýazgylaryň birmeňzeş meýdany bar. Tablisa döredilende düzülýär.
  • Meýdany deslapky baha ( DEFAULT ) edip bolýar .
  • Tablisa üçin, maglumatlarynyň bitewiligini üpjün etmek üçin talaplary beýan edýän çäklendirmeleri ( CONSTRAINT ) belläp bilersiňiz. Bu tablisany döretmek tapgyrynda edilip bilner ( DÖWLET DÖWRÜ ) ýa-da soňrak goşup bolar ( ALTER TABLE ... CONSTRAINT ADD ).
  • Iň ýaýran GÖRNÜŞ :
    • Esasy açar PRIMARY (biziň ýagdaýymyzda Id).
    • Üýtgeşik baha meýdany UNIQUE (Ulag stoly üçin VIN).
    • CHECK meýdançasyny barlamak (göterim bahasy 100-den ýokary bolup bilmez). Meýdandaky şahsy çäklendirmeleriň biri NULL ýa-da NULL däl , bu NULL-yň stol meýdançasynda saklanmagyny gadagan edýän / rugsat berýän.
    • Daşary ýurt açary üçin üçünji tarap tablisasyna baglanyşyk (paýnamanyň bahasy tablisasyndaky aksiýa baglanyşyk).
    • Indeks INDEX (içindäki bahalary gözlemegi çaltlaşdyrmak üçin bir meýdany indekslemek).
    • Fieldsazgylaryň üýtgedilmegi ( INSERT , UPDATE ) meýdanlarynyň bahalary çäklendirmelere ters gelse (CONSTRAINT) bolmaz.
  • Her tablisada ýazgyny özboluşly kesgitlemek üçin ulanyp boljak esasy meýdan (ýa-da birnäçe) bolup biler. Şeýle meýdan (ýa-da birleşýän açar emele getirýän meýdanlar) tablisanyň esasy açaryny - PRIMARY KEY .
    • Esasy açar, tablisadaky ýazgylaryň özboluşlylygyny üpjün edýär; üstünde esasy baha esasynda ähli ýazga çalt girip bilýän indeks döredilýär.
    • Esasy açaryň bolmagy, tablisalaryň arasynda baglanyşyk döretmegi has aňsatlaşdyrýar. Ondan soň, emeli başlangyç açary ulanarys: ilkinji ýazgy üçin id = 1her indiki ýazgy, ID bahasy bir ýokarlandyrylan tablisa giriziler. Bu açara köplenç AutoIncrement ýa-da AutoIdentity diýilýär .
Aslynda, paýnamalaryň tablisasy: Bölüm 2. DBMS gurluşy, tablisalar we maglumatlar görnüşleri - 2 Bu ýagdaýda paýnamanyň adyny açar hökmünde ulanmak mümkinmi? Umuman aýdanyňda - hawa, ýöne käbir kompaniýanyň dürli paýnamalary çykaryp, olary diňe öz ady bilen çagyrmagy ähtimal. Bu ýagdaýda indi özboluşlylyk bolmaz. Iş ýüzünde emeli başlangyç açar köplenç ulanylýar. Adamlaryň ýazgylaryny öz içine alýan tablisada doly ady özboluşly açar hökmünde ulanmak, özboluşlylygy üpjün etmez. Şeýle hem doly adyň we doglan senäniň utgaşmasyny ulanmak.

DBMS-de maglumatlaryň görnüşleri

Beýleki programmirleme dili ýaly SQL-da maglumat ýazuwy bar. Ine iň köp ýaýran SQL maglumat görnüşleri: Bitewi görnüşler
SQL görnüşi SQL sinonimleri Java-da gabat gelmek Düşündiriş
INT INT4, INTEGER java.lang.Integer 4 baýtlyk bitewi san, -2147483648… 2147483647
BOOLEAN BOOL, BIT java.lang.Boolean Dogry ýalňyş
TINYINT java.lang.Baýte 1 baýtlyk bitewi san, -128… 127
Kiçijik INT2 java.lang.Sort 2 baýtlyk bitewi san, -32768… 32767
ULY INT8 java.lang. Uzyn 8 baýtlyk bitewi san, -9223372036854775808… 9223372036854775807
AUTO_INCREMENT GIRIŞ java.lang. Uzyn Tablisa mahsus artýan hasaplaýjy. Oňa täze bir baha girizilse, bir köpelýär. Döredilen bahalar hiç haçan gaýtalanmaýar.
Hakyky
SQL görnüşi SQL sinonimleri Java-da gabat gelmek Düşündiriş
DEKIMAL (N, M) DEK, Nomer java.math.BigDecimal Kesgitlenen takyklyk onluk (N bitewi sanlar we M fraksiýa sanlary). Esasan maliýe maglumatlary bilen işlemek üçin niýetlenendir.
Jübüt FLOAT8 java.lang.Double Iki gezek takyk hakyky san (8 baýt).
HAKYKAT FLOAT4 java.lang.Real Takyk takyk hakyky san (4 baýt).
Setir
SQL görnüşi SQL sinonimleri Java-da gabat gelmek Düşündiriş
WARÇAR (N) NWARÇAR java.lang.String UNICODE uzynlygy N. uzynlygy 2147483647 bilen çäklenýär Setiriň ähli mazmunyny ýada salýar.
senesi we wagty
SQL görnüşi SQL sinonimleri Java-da gabat gelmek Düşündiriş
WAGT java.time.LocalTime, java.sql.Time DATETIME öwrülende wagt saklamak (nanosekuntlara çenli), senesi 1970-nji ýylyň 1-nji ýanwaryna bellendi.
Sene java.time.LocalDate, java.sql.Timestamp Seneleri yyyy-mm-dd formatda saklamak, wagt 00:00 hökmünde kesgitlenýär
DATETIME TIMESTAMP java.time.LocalDateTime, java.sql.Timestamp Sene + wagt saklamak (wagt guşaklygyny hasaba almazdan).
Uly göwrümli maglumatlary saklamak
SQL görnüşi Java-da gabat gelmek Düşündiriş
BLOB java.io.InputStream, java.sql.Blob Ikilik maglumatlary saklamak (suratlar, faýllar ...).
CLOB java.io.Reader, java.sql.Clob Uly tekst maglumatlary (kitaplar, makalalar ...) saklamak, VARCHAR-dan tapawutlylykda maglumatlary böleklere ýada salýar.

SQL ýazuw stili

Köp diller üçin kod formatlamak boýunça görkezmeler bar. Adatça, şeýle resminamalarda üýtgeýänleri, yzygiderliligi, usullary we beýleki dil gurluşlaryny atlandyrmagyň düzgünleri bar. Şeýlelik bilen, Python üçin PEP8, Java üçin - Java üçin Oracle Code konwensiýalary bar . SQL üçin biri-birinden azajyk tapawutlanýan birnäçe dürli toplum döredildi. Her niçigem bolsa, koduňyzy format edeniňizde, esasanam bir toparda işleýän bolsaňyz, düzgünlere eýermek endigini ösdürmeli. Düzgünler, mysal üçin aşakdakylar bolup biler (elbetde, özüňiz üçin başga düzgünler toplumyny döredip bilersiňiz, esasy zat geljekde olara ýapyşmakdyr):
  • Buýruklary we operatorlary öz içine alýan açar sözler we ätiýaçlandyrylan sözler baş harplar bilen ýazylmalydyr: JEMLE .JI, GÖRNÜŞ ...
  • Tablisalaryň, meýdanlaryň we beýleki obýektleriň atlary SQL dil açar sözlerine gabat gelmeli däldir (makalanyň soňundaky baglanyşyga serediň), ýöne olary öz içine alyp biler.
  • Tablisa atlary olaryň maksadyny görkezmelidir. Olar kiçi harplar bilen ýazylýar. Adyndaky sözler biri-birinden aşaky çyzyklar bilen bölünýär. Ahyryndaky söz köplükde bolmaly : söwdagärler (söwdagärler), paý_ratlar (paý paýy).
  • Tablisa meýdan atlary olaryň maksadyny görkezmelidir. Olar kiçi harplar bilen ýazylmalydyr, adyndaky sözler Düýe Case stilinde formatlanmalydyr we ahyrynda söz ýeketäk ulanylmalydyr : ady (ady), paýlaşma bahasy (paý paýy).
  • Emeli açar meýdanlarynda id sözi bolmaly.
  • GYSGAÇA atlar tablisanyň atlandyryş konwensiýalaryna eýermelidir. Şeýle hem, olara gatnaşýan meýdanlary we tablisalary öz içine almaly, semantik prefiksden başlamaly: check_ (meýdan bahasyny barlamak), pk_ (esasy açar), fk_ (daşary ýurt açary), uniq_ (meýdan özboluşlylygy), idx_ (indeks). Mysal: pk_traider_share_actions_id (söwdagär_share_actions tablisasy üçin id meýdançasyndaky esasy açar).
  • SQL-i öwreneniňizde düzgünleriň sanawy doldurylýar / üýtgediler.

DBMS dizaýny

DBMS döretmezden ozal dizaýn edilmeli. Iň soňky shemada tablisalar, meýdanlar toplumy, GÖRNÜŞ, düwmeler, meýdanlar üçin deslapky şertler, tablisalar we beýleki maglumatlar bazasynyň arasyndaky gatnaşyklar bar. Internetde kiçi DBMS dizaýn etmek üçin köp mugt onlaýn / awtonom dizaýnerleri tapyp bilersiňiz. Gözleg motoryna “Maglumat bazasynyň dizaýneri mugt” ýaly bir zady ýazyp görüň. Şeýle programmalaryň peýdaly goşmaça aýratynlyklary bar:
  • DBMS döretmek üçin SQL buýruklaryny döredip biler.
  • Sazlamalary diagrammada wizual görkeziň.
  • Has gowy görmek üçin tablisalary göçürmäge mümkinçilik berýär.
  • Diagrammada düwmeleri, indeksleri, gatnaşyklary, deslapky bahalary we şuňa meňzeşleri görkeziň.
  • DBMS shemasyny uzakdan saklap bilerler.
Mysal üçin, dbdiffo.com düwmeleri görkezýär, boş däl meýdanlary we NN belligi bolan AI (AutoIncrement) hasaplaýjylaryny görkezýär:
Bölüm 2. DBMS gurluşy, tablisalar we maglumatlar görnüşleri - 3

DBMS-de tablisa döretmek

Şonuň üçin bizde diagramma bar. Indi tablisalary döretmäge geçeliň (Tablisa dörediň). Munuň üçin deslapky maglumatlaryň bolmagy maslahat berilýär:
  • tablisanyň ady
  • meýdan atlary we görnüşi
  • meýdanlarynda çäklendirmeler (CONSTRAINTS)
  • meýdanlar üçin deslapky bahalar (bar bolsa)
  • bar bolsa esasy açar (PRIMARY KEY)
  • tablisalaryň arasyndaky baglanyşyk (Daşary ýurt açary)
“CREATE TABLE” buýrugynyň ähli wariantlaryny jikme-jik öwrenmeris; söwdagärler üçin tablisa döretmek mysaly bilen SQL-iň esaslaryna serederis:
CREATE TABLE traiders(
	id BIGINT AUTO_INCREMENT PRIMARY KEY,
	name VARCHAR(255) NOT NULL,
	freqTiсk INTEGER NOT NULL,
	cash  DECIMAL(15,2) NOT NULL DEFAULT 1000,
	tradingMethod INTEGER NOT NULL,
	changeProbability INTEGER NOT NULL DEFAULT 50,
	about VARCHAR(255) NULL
);
ALTER TABLE traiders ADD CONSTRAINT check_traiders_tradingMethod
	CHECK(tradingMethod IN (1,2,3));
ALTER TABLE traiders ADD CONSTRAINT check_traiders_changeProbability
	CHECK(changeProbability <= 100 AND changeProbability > 0)
Geliň, has içgin seredeliň:
  • CREATE TABLE traiders(meýdan beýany) - görkezilen at bilen tablisany döredýär; düşündirişde meýdanlar vergul bilen bölünýär. Islendik buýruk nokat bilen gutarýar.
  • Meýdanyň beýany, adyndan başlaýar, yzyndan görnüşi, CONSTRAINT we başlangyç bahasy.
  • id BIGINT AUTO_INCREMENT PRIMARY KEY- bitewi görnüşiň id meýdany esasy açar we artýan hasaplaýjydyr (id meýdançasy üçin her täze ýazgy üçin bu tablisada öň döredileninden has uly baha dörediler).
  • cash DECIMAL(15,2) NOT NULL DEFAULT 1000- nagt meýdan, onluk, onluk nokatdan 15 san we ondan soň iki san (maliýe maglumatlary, mysal üçin dollar we sent). NULL bahalaryny kabul edip bolmaýar Hiç hili baha berilmese, 1000 bahasyny alar.
  • about VARCHAR(255) NULL- meýdany, uzynlygy 255 simwoldan ybarat setir, boş bahalary kabul edip biler.
Tablisa döredilenden soň CONSTRAINT şertleriniň bir bölegini düzüp biljekdigimize üns beriň . Tablisanyň gurluşyny we meýdanlaryny üýtgetmek üçin gurluşy gözden geçireliň: ALTER TABLE table_name ADD CONSTRAINT çäklendirme_name CHECK (şert) mysallary ulanyp:
  • CHECK(tradingMethod IN (1,2,3))- söwda usuly usuly diňe 1,2,3 bahany alyp biler
  • CHECK(changeProbability <= 100 AND changeProbability > 0)- ChangeProbability meýdany 1-den 100 aralygynda bitewi bahalary alyp biler

Tablisalaryň arasyndaky gatnaşyklar

Tablisalaryň arasyndaky gatnaşyklaryň beýanyny seljermek üçin, paýlaşma_ratlaryň döredilmegine seredeliň:
CREATE TABLE share_rates(
	id BIGINT AUTO_INCREMENT PRIMARY KEY,
	operDate datetime NOT NULL,
	share BIGINT NOT NULL,
	rate DECIMAL(15,2) NOT NULL
);
ALTER TABLE share_rates ADD FOREIGN KEY (share) REFERENCES shares(id)
Bölüm 2. DBMS gurluşy, tablisalar we maglumatlar görnüşleri - 4
Başga bir tablisanyň bahalaryna salgylanma aşakdaky ýaly kesgitlenip bilner: ALTER TABLEtable_from_which_referred ADD FOREIGN KEY(field_that_referred) REFERENCEStable_to_which_referred (field_that_referred) Paýnamalarda paýnamalarymyz bar, mysal üçin id = 50 üçin Microsoft paýnamalaryny başlangyç bahasy bilen saklaýarys 17.5, 20 deltasy we 4% üýtgemegi mümkinçiligi. “Share_rates” tablisasy üçin üç sany esasy häsiýet alýarys:
  • ID açarynyň bahasyny paýnamalar tablisasyndan galan maglumatlary (ady we ş.m.) almak üçin ulanmak üçin paý meýdançasyndaky paýnamalar tablisasyndan saklamaly.
  • Promotionok bolan mahabat üçin nyrh döredip bilmeris. Paýlaşma meýdanyna ýok bahany girizip bilmersiňiz (munuň üçin paýnamalar tablisasynda bu id bilen ýazgy ýok), sebäbi tablisalaryň arasynda hat ýok.
  • Share_rates-de nyrhlar kesgitlenen paýnamalardaky paý ýazgysyny pozup bilmeris.
Soňky iki nokat, saklanylýan maglumatlaryň bitewiligini üpjün etmek üçin hyzmat edýär. Emulýasiýamyzyň SQL tablisalarynyň döredilmegini we makalanyň ahyrynda github ammaryna baglanyşygy ulanyp, degişli synplaryň usullaryny Java ýerine ýetirişinde SQL talaplarynyň mysallaryny görüp bilersiňiz. Üçünji bölüm
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION