Buatlah DB Schema untuk basic chat messaging system dengan fitur :
- 1 on 1 messaging
- Group messaging, di dalam group ada role :
- Admin (yang bikin group, dan bisa menambah atau menghapus member)
- Member (yang di add admin ke dalam group, hanya bisa mengirim message)
- Status (read/sent/pending)
- Sharing images/files
1 nomor handphone digunakan untuk membuat 1 akun
Dibolehkan juga untuk menambahkan skenario/kondisi yang bisa ditambahkan ke dalam schema dari penjelasan diatas.
Anda bebas menentukan, boleh menggunakan SQL atau noSQL. Dan jelaskan kenapa anda memilih pilihan tersebut.
Pendekatan penggunaan jenis database : SQL
- Sistem yang dibuat bertujuan agar data lebih terstruktur.
- Adanya relasi antar setiap entitas yang dibuat.
-
Tabel
users
: Menyimpan informasi tentang pengguna, termasukid
sebagai primary key,username
untuk nama pengguna, danphone_number
yang unik untuk nomor telepon pengguna. -
Tabel
groups
: Menyimpan informasi tentang grup, denganid
sebagai primary key. -
Tabel
chats
: Menyimpan informasi tentang percakapan antara pengguna, denganid
sebagai primary key. -
Tabel
user_groups
: Merupakan pivot table yang menghubungkan antara pengguna dan grup, dengan kolomid
sebagai primary key,user_id
sebagai foreign key yang merujuk keusers.id
,group_id
sebagai fyoreign ke yang merujuk kegroups.id
, danis_admin
yang menandakan apakah pengguna adalah admin dari grup tersebut. -
Tabel
users_chats
: Merupakan pivot table yang menghubungkan antara pengguna dan percakapan, denganid
sebagai primary key,user_id
sebagai foreign key yang merujuk keusers.id
, danchat_id
sebagai foreign key yang merujuk kechats.id
. -
Tabel
messages
: Menyimpan informasi tentang pesan yang dikirim dalam percakapan, denganid
sebagai primary key,user_id
sebagai foreign key yang merujuk keusers.id
,chat_id
sebagai foreign key yang merujuk kechats.id
yang menandakan percakapan di mana pesan dikirim,group_id
sebagai foreign key yang merujuk kegroups.id
yang menandakan grup di mana pesan dikirim,type
untuk menandakan tipe pesan (misalnya, teks, gambar, atau file),content
untuk isi pesan atau url sesuai dengan type yang dipilih,sent_at
untuk waktu pengiriman pesan atau status pending,delivery_at
merupakan waktu pesan telah terkirim atau status sent, danseen_at
merupakan waktu pesan dilihat oleh penerima atau status read. tipe data yang digunakan untuk waktu merupakan varchar bertujuan untuk mengatasi adanya perbedaan waktu pada pengguna, sehingga akan diimplementasikan menggunakanUnix Epoch Time
yang lebih universal.
Anda diberikan array angka integer positif yang mewakili harga stok dalam beragam hari (setiap index array mencerminkan hari yang berbeda) anda juga diberikan integer (i), yang mewakili jumlah transaksi yang boleh dilakukan. Satu transaksi terdiri dari pembelian stok pada suatu hari dan menjualnya di kemudian hari.
Tulis sebuah fungsi yang menghasilkan keuntungan terbanyak yang dapat dilakukan melalui pembelian dan penjualan stok, bergantung dari (i) transaksi
Note
: Anda hanya dapat memegang satu share stok pada satu saat; jadi anda tidak dapat
membeli lebih dari satu share stok pada hari manapun, dan anda tidak dapat membeli
sebuah share dari stok manapun kalau anda masih memegang share lain. Anda juga tidak perlu menggunakan semua sebuah (i) transaksi yang diperbolehkan.
Input :
i = 2, prices = [ 7, 1, 5, 3, 6, 4, 10 ]
Output :
11
Explanation :
- Membeli pada hari ke 1 =
1
dan menjual pada hari ke 4 =6
(6 - 1) = 5 - Membeli pada hari ke 5 =
4
dan menjual pada hari ke 6 =10
(10 - 4) = 6 - Total profit dengan sejumlah i transaksi adalah
5 + 6 = 11
- Inisialiasi sebuah array profit yang berisikan buy and sell.
- Pada hari ke 0, asumsikan kita akan melakukan buy dan belum ada transaksi, sehingga dapat disimpulkan untuk profit pembelian adalah minus dan profit penjualan masih 0.
- Kondisi harga beli transaksi ke 0:
- Kalau harga beli saat ini lebih rendah dari harga beli yang sudah ada, artinya kita akan menggunakan harga beli yang lebih rendah.
- Jika tidak maka akan tetap menggunakan harga beli yang sudah ada.
- Kondisi harga jual transaksi ke 0:
- Kalkulasikan potensi keuntungan yang diperoleh misalkan menjual saham pada hari ini, jika harga lebih tinggi maka akan digunakan harga jual yang lebih tinggi, begitupun sebaliknya.
- Kondisi transaksi 1 sampai k-1
- Memperbarui harga beli untuk transaksi setiap harinya.
- Bandingkan keuntungan dari transaksi sebelumnya jika penjualan dan pembelian dilakukan pada hari ini.
- pilih harga beli yang paling rendah.
- Memperbarui harga jual untuk transaksi setiap harinya.
- Bandingkan keuntungan dengan menjual saham hari ini.
- Pilih potensi keuntungan yang paling tinggi, atau sebaliknya.
- Memperbarui harga beli untuk transaksi setiap harinya.
- Keuntungan maksimum dapat diperoleh dari nilai penjualan transaksi terakhir yang dicapai oleh jumlah transaksi yang diperbolehkan.
Iterasi | k | prices[j] | profit[0].buy | profit[0].sell | profit[1].buy | profit[1].sell |
---|---|---|---|---|---|---|
1 | 0 | 7 | -7 | 0 | -7 | 0 |
2 | 1 | 1 | -1 | 0 | -1 | 0 |
3 | 2 | 5 | -1 | 4 | -1 | 4 |
4 | 3 | 3 | -1 | 4 | 1 | 4 |
5 | 4 | 6 | -1 | 5 | 1 | 7 |
6 | 5 | 4 | -1 | 5 | 1 | 7 |
7 | 6 | 10 | -1 | 9 | 1 | result = 11 |