የሜሴንጀር ዳታቤዝ (ክፍል 1)፡ የመሠረት ማዕቀፉን መንደፍ

የሜሴንጀር ዳታቤዝ ከባዶ የመንደፍ ምሳሌ በመጠቀም የንግድ መስፈርቶችን ወደ ተወሰኑ የውሂብ መዋቅሮች እንዴት መተርጎም እንደሚችሉ።

የሜሴንጀር ዳታቤዝ (ክፍል 1)፡ የመሠረት ማዕቀፉን መንደፍ
የእኛ መሠረት ትልቅ እና የተከፋፈለ አይሆንም ፣ እንደ VKontakte ወይም Badooነገር ግን "እንዲሆን" ነበር, ግን ጥሩ ነበር - ተግባራዊ, ፈጣን እና በአንድ አገልጋይ ላይ ተስማሚ PostgreSQL - ለምሳሌ በጎን በኩል የሆነ የተለየ የአገልግሎቱን ምሳሌ ማሰማራት ይችላሉ።

ስለዚህ፣ የሻርዲንግ፣ የማባዛት እና የጂኦ-ስርጭት ስርዓቶች ጉዳዮችን አንነካም፣ ነገር ግን በመረጃ ቋቱ ውስጥ ባሉ የወረዳ መፍትሄዎች ላይ እናተኩራለን።

ደረጃ 1፡ አንዳንድ የንግድ ዝርዝሮች

የኛን መልእክት ረቂቅ በሆነ መልኩ አንቀርፀውም፣ ነገር ግን ከአካባቢው ጋር እናዋህዳለን። የኮርፖሬት ማህበራዊ አውታረ መረብ. ያም ማለት ህዝቦቻችን "ልክ አይፃፉም" ግን አንዳንድ የንግድ ችግሮችን በመፍታት ረገድ እርስ በርስ ይግባባሉ.

እና የንግድ ሥራ ተግባራት ምንድ ናቸው?... የልማት ክፍል ኃላፊ የሆነውን ቫሲሊን ምሳሌ እንመልከት።

  • "ኒኮላይ፣ ለዚህ ​​ተግባር ዛሬ መታጠፍ እንፈልጋለን!"
    ይህ ማለት የደብዳቤ ልውውጥ በአንዳንዶች ሁኔታ ውስጥ ሊከናወን ይችላል ሰነድ.
  • “ኮሊያ፣ ዛሬ ምሽት ወደ ዶታ ትሄዳለህ?”
    ማለትም አንድ ጥንድ ኢንተርሎኩተሮች እንኳን በአንድ ጊዜ መገናኘት ይችላሉ። በተለያዩ ርዕሰ ጉዳዮች ላይ.
  • "ጴጥሮስ፣ ኒኮላይ፣ ለአዲሱ አገልጋይ የዋጋ ዝርዝሩን በአባሪው ውስጥ ይመልከቱ።"
    ስለዚህ, አንድ መልእክት ሊኖረው ይችላል በርካታ ተቀባዮች. በዚህ አጋጣሚ መልእክቱ ሊይዝ ይችላል። የተያያዙ ፋይሎች.
  • “ሴሚዮን፣ አንተም ተመልከት።
    እና ወደ ነባር ደብዳቤዎች ለመግባት እድሉ ሊኖር ይገባል አዲስ አባል ይጋብዙ.

አሁን በዚህ “ግልጽ” ፍላጎቶች ዝርዝር ላይ እንቆይ።

የችግሩን የተተገበሩ ልዩ ሁኔታዎች እና ለእሱ የተሰጡትን ገደቦች ሳይረዱ, ዲዛይን ውጤታማ የውሂብ ጎታ ንድፍ ለመፍታት ፈጽሞ የማይቻል ነው.

ደረጃ 2፡ ትንሹ የሎጂክ ዑደት

እስካሁን ድረስ ሁሉም ነገር ከኢሜል ደብዳቤዎች ጋር በጣም ተመሳሳይ ነው - ባህላዊ የንግድ መሣሪያ። አዎን, "በአልጎሪዝም" ብዙ የንግድ ችግሮች እርስ በእርሳቸው ተመሳሳይ ናቸው, ስለዚህ እነሱን ለመፍታት የሚረዱ መሳሪያዎች በመዋቅር ተመሳሳይ ይሆናሉ.

ቀደም ሲል የተገኘውን የአካላት ግንኙነቶች አመክንዮአዊ ንድፍ እናስተካክል. የእኛን ሞዴል ለመረዳት ቀላል ለማድረግ, በጣም ጥንታዊውን የማሳያ አማራጭን እንጠቀማለን የ ER ሞዴሎች ያለ UML ወይም IDEF ማስታወሻዎች ውስብስብነት

የሜሴንጀር ዳታቤዝ (ክፍል 1)፡ የመሠረት ማዕቀፉን መንደፍ

በምሳሌአችን፣ የፋይሉ ሰው፣ ሰነድ እና ሁለትዮሽ “አካል” ያለእኛ አገልግሎት ራሳቸውን ችለው የሚገኙ “ውጫዊ” አካላት ናቸው። ስለዚህ፣ በቀላሉ ወደፊት እንደ አንዳንድ አገናኞች በ UUID እንገነዘባቸዋለን።

ይሳሉ በተቻለ መጠን ቀላል ንድፎችን - አብዛኞቹ የምታሳያቸው ሰዎች UML/IDEF የማንበብ ባለሙያዎች አይደሉም። ግን መሳልዎን እርግጠኛ ይሁኑ.

ደረጃ 3: የጠረጴዛውን መዋቅር ንድፍ ማውጣት

ስለ ሰንጠረዥ እና የመስክ ስሞችየሜዳዎች እና የጠረጴዛዎች "የሩሲያ" ስሞች በተለየ መንገድ ሊታከሙ ይችላሉ, ግን ይህ የጣዕም ጉዳይ ነው. ምክንያቱም እዚህ በ Tensor ምንም የውጭ ገንቢዎች የሉም፣ እና PostgreSQL በሂሮግሊፍስ እንኳን ስሞችን እንድንሰጥ ያስችለናል በጥቅሶች ውስጥ ተዘግቷል, ከዚያ ምንም ልዩነቶች እንዳይኖሩ ዕቃዎችን በማያሻማ እና በግልጽ መሰየም እንመርጣለን.
ብዙ ሰዎች በአንድ ጊዜ መልእክት ስለሚጽፉልን፣ አንዳንዶቹም ይህን ሊያደርጉ ይችላሉ። ከመስመር ውጭ, ከዚያ ቀላሉ አማራጭ ነው UUIDsን እንደ መለያዎች ይጠቀሙ ለውጭ አካላት ብቻ ሳይሆን በአገልግሎታችን ውስጥ ላሉ ነገሮች ሁሉ። በተጨማሪም ፣ በደንበኛው በኩል እንኳን ሊፈጠሩ ይችላሉ - ይህ የመረጃ ቋቱ ለጊዜው በማይገኝበት ጊዜ መልእክት መላክን እንድንደግፍ ይረዳናል ፣ እና የመጋጨት እድሉ በጣም ዝቅተኛ ነው።

በመረጃ ቋታችን ውስጥ ያለው ረቂቅ የሰንጠረዥ መዋቅር ይህን ይመስላል።
ጠረጴዛዎች: RU

CREATE TABLE "Тема"(
  "Тема"
    uuid
      PRIMARY KEY
, "Документ"
    uuid
, "Название"
    text
);

CREATE TABLE "Сообщение"(
  "Сообщение"
    uuid
      PRIMARY KEY
, "Тема"
    uuid
, "Автор"
    uuid
, "ДатаВремя"
    timestamp
, "Текст"
    text
);

CREATE TABLE "Адресат"(
  "Сообщение"
    uuid
, "Персона"
    uuid
, PRIMARY KEY("Сообщение", "Персона")
);

CREATE TABLE "Файл"(
  "Файл"
    uuid
      PRIMARY KEY
, "Сообщение"
    uuid
, "BLOB"
    uuid
, "Имя"
    text
);

ጠረጴዛዎች፡ EN

CREATE TABLE theme(
  theme
    uuid
      PRIMARY KEY
, document
    uuid
, title
    text
);

CREATE TABLE message(
  message
    uuid
      PRIMARY KEY
, theme
    uuid
, author
    uuid
, dt
    timestamp
, body
    text
);

CREATE TABLE message_addressee(
  message
    uuid
, person
    uuid
, PRIMARY KEY(message, person)
);

CREATE TABLE message_file(
  file
    uuid
      PRIMARY KEY
, message
    uuid
, content
    uuid
, filename
    text
);

ቅርጸቱን ሲገልጹ በጣም ቀላሉ ነገር የግንኙነት ግራፉን "መፍታት" መጀመር ነው ከተጠቀሱት ጠረጴዛዎች ራሳቸውን ለማንም.

ደረጃ 4፡ ግልጽ ያልሆኑ ፍላጎቶችን እወቅ

ያ ነው ፣ እርስዎ በትክክል መጻፍ የሚችሉበት ዳታቤዝ አዘጋጅተናል እና እንደምንም አንብብ።

እራሳችንን በአገልግሎታችን ተጠቃሚ ጫማ ውስጥ እናስቀምጠው - ምን ማድረግ እንፈልጋለን?

  • የመጨረሻ መልዕክቶች
    ይህ በጊዜ ቅደም ተከተል የተደረደሩ በተለያዩ መስፈርቶች ላይ የተመሰረተ "የእኔ" መልዕክቶች መዝገብ. ከተቀባዮቹ አንዱ የሆንኩበት፣ ደራሲው የሆንኩበት፣ የጻፉልኝና ያልመለስኩበት፣ ያልመለሱልኝ፣...
  • የደብዳቤው ተሳታፊዎች
    በዚህ ረጅምና ረጅም ውይይት ላይ የሚሳተፈው ማነው?

የእኛ መዋቅር ሁለቱንም እነዚህን ችግሮች "በአጠቃላይ" ለመፍታት ያስችለናል, ነገር ግን በፍጥነት አይደለም. ችግሩ በመጀመሪያው ተግባር ውስጥ ለመደርደር ነው ኢንዴክስ መፍጠር አልተቻለም, ለእያንዳንዱ ተሳታፊዎች ተስማሚ (እና ሁሉንም መዝገቦች ማውጣት አለብዎት), እና ሁለተኛውን ለመፍታት ያስፈልግዎታል. ሁሉንም መልዕክቶች ማውጣት በዚህ ርዕስ ላይ.

ያልተፈለጉ የተጠቃሚ ተግባራት ደፋር ሊሆኑ ይችላሉ። ምርታማነት ላይ መስቀል.

ደረጃ 5፡ ስማርት ዲኖርማላይዜሽን

ሁለቱም ችግሮቻችን በምንፈታባቸው ተጨማሪ ሠንጠረዦች ይፈታሉ የተባዛው የውሂብ ክፍል, በእነሱ ላይ ለሥራችን ተስማሚ የሆኑ ኢንዴክሶችን ማዘጋጀት አስፈላጊ ነው.
የሜሴንጀር ዳታቤዝ (ክፍል 1)፡ የመሠረት ማዕቀፉን መንደፍ

ጠረጴዛዎች: RU

CREATE TABLE "РеестрСообщений"(
  "Владелец"
    uuid
, "ТипРеестра"
    smallint
, "ДатаВремя"
    timestamp
, "Сообщение"
    uuid
, PRIMARY KEY("Владелец", "ТипРеестра", "Сообщение")
);
CREATE INDEX ON "РеестрСообщений"("Владелец", "ТипРеестра", "ДатаВремя" DESC);

CREATE TABLE "УчастникТемы"(
  "Тема"
    uuid
, "Персона"
    uuid
, PRIMARY KEY("Тема", "Персона")
);

ጠረጴዛዎች፡ EN

CREATE TABLE message_registry(
  owner
    uuid
, registry
    smallint
, dt
    timestamp
, message
    uuid
, PRIMARY KEY(owner, registry, message)
);
CREATE INDEX ON message_registry(owner, registry, dt DESC);

CREATE TABLE theme_participant(
  theme
    uuid
, person
    uuid
, PRIMARY KEY(theme, person)
);

ረዳት ሰንጠረዦችን ሲፈጥሩ ጥቅም ላይ የዋሉ ሁለት የተለመዱ አቀራረቦችን እዚህ ተግብረናል፡

  • መዝገቦችን ማባዛት
    አንድ የመጀመሪያ የመልእክት መዝገብ በመጠቀም ፣ለተለያዩ ባለቤቶች በተለያዩ የመመዝገቢያ ዓይነቶች ውስጥ በርካታ የክትትል መዝገቦችን እንፈጥራለን - ለላኪውም ሆነ ለተቀባዩ። ግን እያንዳንዱ መዝገቦች አሁን በመረጃ ጠቋሚው ላይ ይወድቃሉ - ከሁሉም በኋላ ፣ በተለመደው ሁኔታ ፣ የመጀመሪያውን ገጽ ብቻ ማየት እንፈልጋለን።
  • ልዩ መዝገቦች
    በአንድ የተወሰነ ርዕስ ውስጥ መልእክት በላኩ ቁጥር ፣ እንደዚህ ያለ ግቤት ቀድሞውኑ መኖሩን ማረጋገጥ በቂ ነው። ካልሆነ ወደ “መዝገበ-ቃላታችን” ያክሉት።

በሚቀጥለው የጽሁፉ ክፍል እንነጋገራለን የመከፋፈል አተገባበር ወደ የውሂብ ጎታችን መዋቅር.

ምንጭ: hab.com

አስተያየት ያክሉ