Latihan pemodelan data yang baik untuk pemula adalah membuat model data toko online . Setiap kali saya memberikan latihan ini kepada siswa saya, saya terkejut melihat betapa sulitnya bagi mereka.
Temukan Konsepnya...
Mari kita lihat bagaimana hal itu dapat dilakukan. Kita tahu kita harus membuat tabel untuk setiap konsep dalam domain. Pikirkan tentang kata benda dan frasa kata benda Anda akan gunakan untuk menggambarkan domain. Secara kasar, setiap kata benda adalah baik sebuah konsep, atribut dari sebuah konsep, atau sebuah contoh . Apa saja konsep dasar dalam toko online? Dua kata langsung muncul di benak:
- pelanggan – orang yang membeli barang di toko kami, dan
- produk – barang yang dibeli orang di toko kami.
Setiap pelanggan memiliki kumpulan data dasar yang menggambarkan mereka:id (biasanya Anda memerlukan atribut id di tabel Anda), nama, email, dan kata sandi. Demikian pula, suatu produk memiliki id dan nama. Kami dapat menambahkan lebih banyak atribut untuk pelanggan dan produk, tetapi demi contoh ini, ini akan berhasil. Kami menambahkan dua tabel ke dalam model kami.
... Serta Konsep Abstrak
Ini adalah toko, jadi jelas, kami ingin tahu apa diperintahkan dan oleh siapa . "Pesanan" adalah kata kunci di sebagian besar database, jadi kita tidak boleh menggunakannya untuk nama tabel. Sebagai gantinya, kami akan menggunakan nama purchase
untuk tabel ketiga dalam model kami. Tabel harus entah bagaimana terhubung ke customer
dan ke product
. Sebagai permulaan, mari kita buat referensi antara purchase
dan customer
, dan di antara purchase
dan product
.
customer-purchase
referensi oke. Setiap pembelian dilakukan oleh satu pelanggan; setiap pelanggan dapat melakukan beberapa pembelian. Referensi ini akan tetap ada.
Namun, ada yang salah dengan purchase-product
referensi. Beberapa produk dapat dibeli dalam satu pembelian; beberapa pembelian dapat mencakup produk yang sama. Tetapi referensi kami hanya mengizinkan satu produk dibeli dalam satu pembelian. Mari kita hapus referensi dan pikirkan cara lain untuk memodelkannya.
Satu Bidang Teks Besar untuk Semua Produk yang Dibeli?
Bagaimana kalau kita menambahkan bidang teks besar yang dapat menyimpan nama atau id produk yang dibeli? Sekarang kita bisa membeli beberapa produk dalam satu pembelian. Namun, ada beberapa masalah di sini:
- Pertama, sulit untuk memeriksa apakah produk di
purchased_items
kolom benar-benar ada di database. - Kedua, jika ingin mengganti nama produk (karena salah eja) maka harus mengupdate semua
purchased_items
contoh bidang dalampurchase
meja. - Akhirnya, sulit untuk menganalisis data dalam database. Misalnya, jika Anda ingin mengetahui produk mana yang paling sering dibeli, Anda perlu menggunakan operasi substring teks. Dan itu tidak pernah sangat efisien.
Beberapa Kolom Produk di Tabel Pembelian?
Apa saja opsi lain? Kami ingin pembelian terhubung ke beberapa produk jadi mungkin kami harus menambahkan beberapa purchase_item
kolom dalam tabel pembelian? Yah, itu melelahkan (saya hanya menambahkan 5 kolom dan lelah) dan membuat buatan dan bodoh batas jumlah produk yang dibeli.
Gunakan Tabel Menengah!
Solusi konyol mengisyaratkan solusi yang tepat. Kami ingin memiliki tak terbatas jumlah produk yang terkait dengan pembelian. Satu-satunya cara adalah dengan memiliki tabel penghubung perantara . Sebut saja purchase_item
. purchase_item
tabel terhubung dengan purchase
dan product
. Sekarang pembelian dapat mencakup produk sebanyak yang kita inginkan. Sebagai bonus kita bisa menambahkan data tambahan di tabel:berapa kali membeli, total harga untuk item ini, dan seterusnya.
Kesimpulan:
- Tabel dalam model tidak hanya dapat mewakili objek fisik seperti pelanggan atau produk. Tabel dapat mewakili lebih banyak konsep abstrak seperti pembelian. Contoh lain mungkin pemesanan dalam sistem reservasi hotel, peminjaman buku dalam model untuk perpustakaan, janji dalam sistem untuk dokter, dll.
- Saat Anda membuat model transaksi (yaitu, membeli atau menjual banyak barang), Anda biasanya membutuhkan tiga tabel :satu untuk transaksi (pembelian, atau pemesanan dalam sistem reservasi hotel), satu untuk barang yang dibeli/dijual dalam suatu transaksi (produk, kamar hotel), dan satu untuk item transaksi (item_pembelian, item_pemesanan). Anda dapat menambahkan informasi tambahan di tabel perantara jika perlu.
Buat model database toko Anda sendiri dengan Vertabelo!