Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Model Data untuk Perdagangan Saham, Dana, dan Mata Uang Kripto

Perdagangan cryptocurrency, membeli saham, dan sejenisnya sangat populer akhir-akhir ini – ini dianggap sebagai keuntungan yang mudah. Harga saat ini sedang naik, tetapi kami tidak tahu kapan itu akan berubah. Di sisi lain, kita tahu itu akan terjadi di beberapa titik. Tapi kami di sini bukan untuk membuat prediksi keuangan. Sebagai gantinya, kita akan berbicara tentang model data yang dapat digunakan untuk mendukung perdagangan mata uang kripto dan instrumen keuangan seperti saham atau reksa dana.

Yang Perlu Anda Ketahui Tentang Perdagangan Mata Uang dan Saham

Perbaikan teknologi dalam beberapa dekade terakhir memiliki dampak signifikan pada perdagangan. Saat ini sudah banyak platform trading online yang bisa Anda gunakan. Sebagian besar perdagangan hari ini dilakukan secara virtual – Anda dapat melihat stok kertas di museum, tetapi Anda tidak akan melihat stok yang Anda beli dalam bentuk kertas. Dan Anda tidak perlu mengemasi tas Anda dan pergi ke Wall Street atau bursa saham lainnya untuk melakukan perdagangan. Dari kenyamanan komputer atau perangkat seluler Anda sendiri, Anda dapat membeli atau menjual derivatif keuangan (seperti obligasi, saham, atau komoditas).

Sebagian besar perdagangan (penjualan derivatif keuangan) mengikuti aturan yang sama. Ada penjual dan pembeli. Jika mereka setuju pada harga, perdagangan terjadi. Setelah perdagangan, harga derivatif keuangan tersebut akan dihitung ulang dan prosesnya akan dilanjutkan dengan pedagang baru. Saham dan turunan lainnya bekerja dengan cara yang sama.

Apa itu cryptocurrency? Anda mungkin pernah mendengar tentang Bitcoin dan cryptocurrency lainnya. Tapi apa mereka? Cryptocurrency seperti mata uang virtual, tetapi tidak terikat dengan mata uang dunia nyata (seperti euro atau dolar). Sebagai gantinya, pengguna dapat memperdagangkan cryptocurrency di antara mereka sendiri seperti token. Mereka kemudian dapat menegosiasikan penjualan yang mengubah token mereka menjadi uang nyata. Fungsi penjualan ini persis seperti perdagangan saham dan saham yang dijelaskan di atas.

Subjek ini rumit dan kami dapat memiliki banyak detail dalam model kami (misalnya, catatan dokumen dan transaksi). Saya akan membuatnya tetap sederhana; Saya tidak akan menerapkan jenis perdagangan otomatis atau formula apa pun untuk menghasilkan harga baru setelah peristiwa perdagangan.

Jadi, mari kita lihat model perdagangan sederhana ini.

Model Data




Model data terdiri dari tiga bidang subjek:

  1. Currencies
  2. Items
  3. Traders

Kami akan menampilkan setiap bidang subjek dalam urutan yang tercantum.

Mata Uang

Currencies bidang studi sederhana. Ini berisi empat tabel yang menyimpan setiap mata uang yang kami gunakan dan nilai tukarnya. Mata uang penting karena:

  • Kami akan menggunakan satu mata uang, yang disebut mata uang dasar , untuk perdagangan. Platform perdagangan saham online kemungkinan akan menggunakan dolar AS (USD) sebagai mata uang dasarnya, terlepas dari wilayah sebenarnya pedagang. Semua transaksi akan dikonversi ke mata uang dasar.
  • Kami juga dapat memiliki mata uang non-basis atau mata uang lokal untuk semua negara tempat platform perdagangan kami tersedia. Ini akan memungkinkan kami untuk menampilkan harga dalam mata uang lokal tetapi tetap melakukan perdagangan dalam mata uang dasar.

Dua tabel lainnya berhubungan dengan mata uang dan negara.

Tabel terpenting dalam bidang subjek ini adalah currency meja. Di sinilah kami akan menyimpan semua mata uang yang pernah kami gunakan untuk berdagang, termasuk mata uang kripto. Apakah mata uang termasuk dalam tabel ini tergantung pada apakah mata uang tersebut akan digunakan untuk membayar barang yang diperdagangkan. Untuk setiap mata uang, kami akan menyimpan:

  • code – Sebuah kode yang digunakan untuk UNIK menunjukkan mata uang itu. Untuk mata uang nasional, ini akan menjadi kode ISO 4217 (misalnya USD untuk Dolar Amerika Serikat) atau kode resmi lainnya. Kami juga dapat menggunakan ISO 4217 untuk cryptocurrency; XBT adalah kode ISO Bitcoin. Namun, Bitcoin juga menggunakan kode BTC secara informal.
  • name – Nama UNIK mata uang itu (mis. Dolar Amerika Serikat).
  • is_active – Jika mata uang saat ini aktif di sistem kami.
  • is_base – Jika mata uang ini adalah mata uang dasar sistem kami. Biasanya, kami hanya akan memiliki satu mata uang dasar dalam satu waktu. Mungkin saja kita bisa memiliki lebih dari satu, seperti menggunakan euro untuk negara bagian UE dan dolar AS untuk area lain. Dalam hal ini, kami memiliki kemampuan untuk menetapkan mata uang dasar ke setiap negara dengan atribut ini.

Tabel berikutnya menyimpan kurs saat ini dan historis antara pasangan mata uang. Dalam currency_rate tabel, kami akan menyimpan currency_id kami ingin membandingkan dengan base_currency_id serta rate ketika pasangan ini disimpan (ts ). Karena kami akan menyimpan tarif sebagaimana adanya pada berbagai titik waktu, tabel ini akan menyimpan data historis dan terkini.

Daftar semua negara yang relevan disimpan di country kamus. Selain kunci utama (id ), ini berisi satu atribut yang memiliki name negara UNIK .

Tabel terakhir di area subjek ini adalah currency_used meja. Dalam kebanyakan kasus, suatu negara akan selalu menggunakan mata uang yang sama. Namun, perubahan dapat terjadi, seperti ketika banyak negara UE mengganti mata uang nasional mereka dengan euro. Untuk menutupi kemungkinan seperti itu, kami akan menyimpan riwayat semua mata uang yang telah kami gunakan. Untuk setiap catatan dalam tabel ini, kami akan menyimpan referensi ke country tabel (country_id ), currency tabel (currency_id ), dan kapan mata uang ini digunakan (date_from dan date_to ). Jika date_to adalah NULL, maka mata uang ini sedang digunakan. Tentu saja, hanya satu mata uang yang boleh digunakan per negara. Kami tidak akan menerapkan pemeriksaan itu dalam model; sebagai gantinya, kami akan melakukan pemeriksaan saat catatan ditambahkan atau diperbarui dalam tabel ini.

Item

Tabel di Items area subjek menentukan semua item yang tersedia untuk diperdagangkan dan statusnya saat ini. Ini juga mencatat semua perubahan yang terjadi pada item ini dari waktu ke waktu.

item tabel mencantumkan semua item yang dapat dibeli atau dijual oleh pedagang (atau yang telah mereka beli atau jual). Ini bisa berupa saham, dana, atau cryptocurrency. Setiap perdagangan yang melibatkan instrumen keuangan ini menggunakan proses yang hampir sama persis, sehingga kita dapat menggunakan struktur yang sama untuk semuanya. Untuk setiap item, kami akan menyimpan:

  • code – Kode teks UNIK untuk item tersebut, mirip dengan yang kami gunakan untuk berbagi (mis. NASDAQ menggunakan kode “AAPL” untuk Apple Inc).
  • name – Nama lengkap perusahaan (untuk saham), dana, atau cryptocurrency.
  • is_active – Apakah item ini tersedia untuk diperdagangkan atau tidak.
  • currency_id – Mengacu pada currency digunakan sebagai mata uang dasar untuk item ini.
  • details – Semua detail tambahan (seperti jumlah saham yang diterbitkan) dalam format tekstual.

price tabel melacak semua perubahan harga sepanjang waktu. Setelah perubahan terjadi, kami akan menyimpan waktu (ts ), dan buy dan sell harga barang (item_id ) terlibat. Kami juga akan menyimpan referensi ke currency tabel, yang memberi tahu kita mata uang yang digunakan untuk menetapkan nilai item tersebut pada saat itu. Perhatikan bahwa mata uang pilihan untuk item apa pun dapat berubah.

Tabel terakhir di bidang subjek ini adalah report meja. Idenya adalah untuk menyimpan laporan reguler (yaitu harian) untuk setiap item. Laporan ini akan didasarkan pada perdagangan selama periode tersebut, dan akan menyimpan rincian keuangan di satu tempat. Ini adalah data yang berlebihan, tetapi terbukti sangat berguna saat menanyakan harga historis (yang sering terjadi, karena pedagang sangat tertarik dengan tren). Untuk setiap record dalam tabel ini, kita akan menyimpan:

  • trading_date – Tanggal laporan ini. Jika kami perlu mengkompilasi laporan lebih dari sekali sehari, kami harus membuat perubahan pada model – mis. menambahkan stempel waktu yang menunjukkan kapan periode perdagangan dimulai dan berakhir.
  • item_id dan currency_id – Merujuk item dan currency digunakan.
  • first_price , last_price , min_price , max_price dan avg_price – Harga pertama, terakhir, maksimum, minimum, dan rata-rata untuk item ini selama periode ini.
  • total_amount – Jumlah total yang dibayarkan untuk item tersebut selama periode pelaporan.
  • quantity – Jumlah (kuantitas) barang yang diperdagangkan selama periode pelaporan ini. Harap diperhatikan bahwa harga rata-rata dapat dihitung dari total_amount dan quantity , tapi saya lebih suka memisahkan "total_amount". Ini menyederhanakan situasi saat kami membuat laporan untuk jangka waktu yang lebih lama, seperti mingguan. Dalam hal ini, kita dapat menambahkan semua total_amount atribut dan membaginya dengan jumlah semua quantity atribut untuk mendapatkan harga rata-rata mingguan.

Semua atribut dalam tabel ini (selain kunci utama dan kunci asing) dapat berupa NULL. Ini akan menjadi kasus ketika kami memasukkan rekor untuk periode perdagangan baru – sejauh ini tidak ada perdagangan. Di awal setiap tanggal, kita bisa berharap kita akan memasukkan satu catatan untuk setiap item dan memperbarui nilai-nilai ini seiring berjalannya hari. Nilai akhir yang diperbarui juga akan menjadi laporan akhir untuk hari itu.

Pedagang

Traders area subjek adalah yang terakhir yang akan kita bahas, tetapi ini adalah area terpenting dalam model. Empat tabelnya (meninggalkan country dan item tabel yang telah kami bahas) menyimpan informasi tentang pedagang, inventaris mereka, dan tindakan mereka. Perhatikan bahwa currency tabel yang digunakan di sini hanyalah salinan. Ini digunakan untuk menyederhanakan model dan menghindari hubungan yang tumpang tindih.

Tabel pusat adalah trader meja. Untuk setiap pedagang, kami akan menyimpan:

  • first_name dan last_name – Nama depan dan belakang pedagang.
  • user_name dan password – Nama pengguna dan kata sandi (hash) yang dipilih oleh pedagang. user_name atribut hanya dapat menyimpan nilai UNIK.
  • email – Alamat email pedagang. Ini akan digunakan untuk menyelesaikan proses pendaftaran dan untuk semua kontak selanjutnya dengan pedagang. Itu juga hanya dapat menampung nilai UNIK.
  • confirmation_code – Kode yang dikirimkan kepada pengguna untuk menyelesaikan proses pendaftaran.
  • time_registered dan time_confirmed – Stempel waktu saat pedagang mendaftar dan saat mereka menyelesaikan proses pendaftaran.
  • country_idcountry tempat tinggal pedagang.
  • preferred_currency_idcurrency yang diinginkan pedagang untuk menampilkan harga.

Daftar semua item yang dimiliki trader saat ini disimpan di current_inventory meja. Untuk setiap trader_id UNIK – item_id pasangan, kami akan menyimpan quantity yang dimiliki pedagang saat ini.

Dua tabel yang tersisa berhubungan langsung dengan penawaran dan perdagangan. Kami akan berasumsi bahwa setiap pedagang dapat mengajukan penawaran untuk membeli atau menjual barang dengan harga tertentu. Saat tawaran yang cocok muncul, peristiwa perdagangan akan terjadi. (Kami tidak akan membahas detail yang spesifik untuk bursa saham, di mana broker berfungsi sebagai mediator.)

Kami akan menyimpan catatan semua penawaran di offer meja. Setiap pedagang dapat mengajukan penawaran untuk membeli atau menjual barang. Untuk mewujudkannya, kita perlu menyimpan detail berikut:

  • trader_id dan item_id – Referensi trader siapa yang menempatkan penawaran itu dan item mereka ingin membeli atau menjual.
  • quantity – Jumlah yang ingin mereka beli atau jual.
  • buy dan sell – Jika penawaran ini untuk jual beli. Hanya satu atribut yang dapat disetel pada satu waktu.
  • price – Harga beli atau jual yang diinginkan. Ini tidak wajib karena pedagang mungkin ingin membeli atau menjual berapa pun harganya.
  • ts – Stempel waktu saat catatan ini dimasukkan.
  • is_active – Apakah penawaran ini masih aktif. Ini bisa menjadi tidak aktif a) jika pedagang menyetelnya menjadi tidak aktif, atau b) jika perdagangan telah terjadi.

Tabel terakhir dalam model kami berisi data yang terkait dengan peristiwa perdagangan. Perdagangan terjadi antara dua pengguna setelah mereka berdua mengajukan penawaran. Harga yang digunakan bisa harga pertama yang ditawarkan atau harga saat ini, tergantung apa yang ingin kita terapkan di aplikasi kita. Untuk setiap trade acara, kami akan menyimpan:

  • item_id – Mengacu pada item diperdagangkan.
  • seller_id dan buyer_id – Keduanya merujuk pada trader tabel dan menunjukkan pengguna yang terlibat dalam perdagangan.
  • quantity – Berapa banyak barang yang diperdagangkan dalam transaksi ini.
  • unit_price – Harga satuan yang digunakan untuk item ini dalam perdagangan ini.
  • description – Semua detail tambahan, dalam format tekstual.
  • offer_id – ID offer yang memulai perdagangan ini. Catatan:Penawaran pertama memulai perdagangan, jadi itulah ID yang akan kami simpan di sini.
  • ts – Stempel waktu saat perdagangan ini terjadi.

Bagaimana Menurut Anda?

Kami baru saja mempertimbangkan model data untuk memfasilitasi perdagangan online cryptocurrency, saham, dan derivatif keuangan lainnya. Ini hanya tulang telanjang model; ada banyak detail lain yang bisa kami tambahkan. Saya sedang memikirkan dokumen yang terkait dengan pedagang dan cara untuk menyimpan informasi pembayaran. Apa yang akan Anda tambahkan? Atau mungkin menghapus? Tolong beritahu kami di komentar.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pertimbangan Sekitar Urutan Kolom dalam Indeks dan Sortir

  2. Mantan Eksekutif Capgemini, Sunitha Ray, Bergabung dengan ScaleGrid DBaaS untuk Memperluas Penjualan Perusahaan

  3. Lacak Sinyal dengan Model Data Pemrosesan Sinyal

  4. Mitos Kinerja:Ukuran kolom string yang terlalu besar

  5. SQL, cara memperbarui data