Menggunakan HTMS API untuk bekerja dengan database jaringan relasional

Pendahuluan


Dalam artikel "Model data jaringan relasional" konsep baru pemodelan data HTMS diusulkan, yang merupakan pengembangan dari model relasional kanonik. Artikel ini akan menunjukkan contoh bagaimana bisa digunakan secara praktis menggunakan API tingkat logika.

Contohnya terkait dengan solusi pendidikan dan metodologis yang terkenal untuk membuat situs - templat untuk proyek survei berbasis web pada kerangka kerja Django di MS Visual Studio .

Memahami artikel ini membutuhkan pemahaman dasar tentang bahasa Python dan kerangka kerja Django.


Deskripsi Basis Data


Skema data konseptual adalah empat tabel dan deskripsi dependensi di antara mereka:




Catatan:

  • nomor urut respons dalam survei - hanya digunakan untuk membentuk queryset saat menampilkan halaman dengan survei
  • nama peserta survei yang terdaftar di situs - itu diisi hanya untuk pengguna terdaftar (pengguna tidak terdaftar dapat memilih dan berkomentar). Pengguna terdaftar mungkin menyarankan untuk membuat jajak pendapat baru, tetapi kami tidak mempertimbangkan kehalusan seperti itu dalam artikel ini.

Ketergantungan:

  1. Setiap jajak pendapat (baris dalam tabel Polling ) sesuai dengan 2 atau lebih jawaban, yaitu baris pada tabel Jawaban
  2. Setiap jawaban (satu baris dalam tabel Jawaban ) sesuai dengan 0 atau lebih komentar, yaitu baris dalam tabel Komentar
  3. Jika pengunjung situs memberikan suara untuk pertama kalinya, maka baris baru dibuat untuknya di tabel Pengunjung . Pengguna diidentifikasi oleh alamat ip
  4. Setelah setiap suara, jumlah suara untuk jawaban yang dipilih dalam survei meningkat sebesar 1
  5. Situs harus mengingat jawaban apa yang diberikan setiap pengunjung dan komentar apa yang ditinggalkannya: setiap komentar pengguna ditulis dalam baris baru pada tabel Komentar

Memformalkan basis data menggunakan ORM Django


Pertama, kami menunjukkan bagaimana database akan dideskripsikan secara tradisional - menggunakan kelas dari paket model Django.



Catatan:

  • Atribut jajak pendapat mungkin tampak berlebihan, karena dimungkinkan untuk mendapatkan daftar jajak pendapat melalui daftar jawaban, tetapi ini dilakukan agar tidak kehilangan fakta partisipasi dalam jajak pendapat jika jawabannya dihapus dari jajak pendapat
  • Django secara fisik membuat (atau memodifikasi) database sebelum awal pertama dari program situs berdasarkan subkelas kustom model. Model menggunakan python manage.py perintah migrasi dan makemigrasi yang dijalankan dalam konteks aplikasi

Memformalkan basis data menggunakan HTMS


Untuk membuat deskripsi database, Anda harus mendefinisikan kelasnya:



Polls_db adalah kelas basis data utama untuk aplikasi situs survei. Kelas basis data utama didefinisikan sebagai subkelas HTdb , yang dalam HTMS berfungsi sebagai superclass untuk basis data aplikasi (bisa ada beberapa).


Polling, Jawaban, Komentar, Pengunjung - kelas untuk tabel database. Tabel - salah satu kelas utama HTMS, berfungsi sebagai kelas super untuk kelas tabel tertentu.


HTMS membuat (atau membuka database yang ada) secara langsung selama pelaksanaan program situs. Opsi yang relevan:

  1. Buat database baru dengan nama "polling":
    my_db = Polls_db (db_name = "polls", new = True )
    • file basis data utama ("kosong") akan dibuat secara fisik,
    • di OP, objek basis data utama my_db akan dibuat - turunan dari kelas Polls_db .

  2. Buka database dengan nama "polling":
    my_db = Polls_db (db_name = "polls")
    • file utama dari database yang ada akan dibuka secara fisik,
    • objek my_db akan dibuat di OP, atribut yang berisi informasi dasar tentang database yang dibaca dari file-nya.

Ketika ada database baru yang dibuat selama inisialisasi turunan dari subkelas HTdb , perlu untuk menentukan struktur aktual (skema) pada tingkat logis. Ini dilakukan sekali pada peluncuran pertama situs, tetapi, tidak seperti teknologi ORM, dalam kode program situs itu sendiri.


  1. Tetapkan semua atribut basis data - nama dan tipe datanya:

  2. Tentukan jenis atribut dengan tautan (sisanya secara default akan bertipe 'penyebab'):

  3. Tentukan objek tabel dan pilih atribut (kolom) untuknya dari himpunan semua atribut GT:


Eksekusi kode ini akan mengarah pada pembentukan struktur database dan pembuatan file yang sesuai di server, jika database baru.


Jika database telah dibuat, untuk mengatasinya Anda hanya perlu membuat instance dari kelas tabel:


Perbandingan HTMS dan ORM


Jelas, formalisasi skema data pada level logis dalam HTMS dan ORM serupa, tetapi ada sejumlah perbedaan mendasar.


Dalam HTMS, atribut dan tipe data didefinisikan sebagai ruang tunggal, dalam ORM, mereka terikat ke tabel terpisah.


Seluruh rangkaian atribut basis data dalam ORM dibuat "secara aditif", karena model didefinisikan, mereka tidak dapat diubah secara pemrograman, tetapi dalam HTMS untuk keseluruhan basis data, dan Anda dapat menambah atau menghapusnya dalam aplikasi tanpa migrasi.


Atribut untuk masing-masing model individu dalam ORM bersifat statis, sedangkan dalam HTMS mereka dinamis. Struktur tabel dalam HTMS didefinisikan sebagai proyeksi ruang atribut tunggal - lebih sederhana dan lebih jelas daripada dalam ORM. Algoritma situs web HTMS dapat memberikan opsi untuk mengubah struktur database asli, misalnya, menambahkan atribut baru atau menghapus yang sudah ada, yang pada prinsipnya mustahil dalam teknologi ORM. .


Perhatikan bahwa teknologi HTMS, jika diterapkan dalam kerangka kerja Django, hanya memperluas kemampuannya dan tidak memerlukan pengabaian penggunaan ORM. Misalnya, seluruh sistem otentikasi luar biasa Django, berdasarkan model dan kelas Pengguna (dari modul django.contrib.auth.models), dapat digunakan. Oleh karena itu, pada kenyataannya, situs berbasis Django dengan HTMS biasanya akan menjadi "multimodel", yaitu, satu bagian dari keseluruhan database akan murni relasional, yang lain-jaringan relasional.


Contoh penggunaan HTMS tingkat logis untuk database survei


Fungsi utilitas untuk pengisian awal database dari file JSON


Fungsi membentuk satu set objek dengan polling (queryset untuk tampilan berbasis kelas - polling CBV)


Fungsi membentuk satu set objek dengan jawaban survei (queryset untuk jawaban survei CBV)


Fungsi membentuk satu set objek dengan hasil pemungutan suara pada survei (queryset untuk CBV)


Fungsi untuk merekam hasil pemungutan suara dalam basis data (dipanggil melalui URL dari formulir pemungutan suara)




Kami berharap pembaca akan menghargai kesederhanaan dan kealamian bekerja dengan data dalam HTMS!

Source: https://habr.com/ru/post/id463515/


All Articles