Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Papan buletin - Pengoptimalan basis data

Bagian I

Direvisi 09 Des 10 01:00 EST

Melihat DDL Anda. Oke. Kami perlu mengambil langkah mundur dan mengatur database Anda terlebih dahulu. Itu akan menyelesaikan setengah dari masalah Anda (SQL Anda akan lurus ke depan; dan cepat; lebih sedikit indeks; tidak diperlukan tabel temp). Untuk sementara saya berpikir, aha, Anda memiliki kolom Anda, itu harus stabil, tetapi tidak ada peluang. Top down dari awal, oke. Lihat Diagram Relasi Entitas ini (tidak ada gunanya mengerjakan Model Data, yaitu Entitas, Relasi dan Atribut , sampai kita mendapatkan ER yang benar), dan periksa apakah sudah benar.

  • Caranya adalah, jawablah pertanyaan-pertanyaan berikut (jawaban singkat boleh). Pertanyaan ini menjelaskan Entitas dan Aturan Bisnis . Bagaimana Anda memahami database secara umum, dan data Anda khususnya sangat penting. Anda telah menempuh perjalanan jauh, sendirian, sehingga kami dapat mengambilnya dari sana.

  • Saya rasa ▶postingan ini◀ mungkin bisa membantu Anda, untuk memahami tahapan formal yang harus diikuti; yang kita hubung singkat di sini.

  • Yang terpenting, sepenuhnya, dan sepenuhnya, lupakan fungsi dan persyaratan pengkodean apa pun. Data harus dimodelkan secara independen dari aplikasi, hanya sebagai Data. Pemodelan Fungsi adalah ilmu yang berbeda. Pertama, dapatkan yang benar; kemudian dapatkan hak yang lain; dan keduanya bersama-sama memainkan nada yang indah. Coba gabungkan keduanya; melakukan kedua tugas pada saat yang sama, dan mereka bahkan tidak akan membuat band garasi pinggiran kota.

Untuk singkatnya, dan demi siapa pun yang membaca ini, saya menggunakan Bagian Tertutup dan Terbuka; ketika item Terbuka (diskusi) ditutup, saya akan membuatnya ringkas, dan memindahkannya ke bagian Tertutup. Pertahankan penomoran, karena hal-hal terkadang kembali menghantui kita. Anda mungkin ingin melakukan hal yang sama, atau bahkan menghapus diskusi di pihak Anda.

Tautan untuk gambar-gambar cantik ada di akhir.

Permintaan maaf:pengeditan tidak berfungsi; sub-penomoran tidak konsisten

Masalah Tertutup

  1. users.bb_locations_csv adalah relasi banyak-ke-banyak antara pengguna dan lokasi:
    • Masing-masing elemen tersebut harus menjadi entri dalam kolom diskrit, dalam baris diskrit
    • Satu pengguna dapat memiliki banyak lokasi dan 1 lokasi dapat memiliki banyak pengguna banyak-ke-banyak
    • Baca ▶postingan ini◀ untuk diskusi tentang cara penanganannya dan tahap penanganannya
    • Pada Tahap Logika ini, itu hanya hubungan n::n, seperti yang telah saya gambar, Anda dapat melupakannya untuk saat ini, itu akan diberikan, sederhananya, ketika kita sampai ke Tahap fisik.
    • Percayalah, saya akan memberikan kode yang tidak lebih kompleks dari ...WHERE IN () untuk tujuan yang Anda nyatakan.
    • Setelah dipikir-pikir, jika saya mematahkan jari Anda, Anda akan mengetik lebih lambat, jadi sebaiknya saya tidak
    • Oke, aplikasi Anda berbasis browser, dan halamannya dinamis (saran saya adalah halaman statis yang perlu diperbaiki); lanjutkan dengan kotak centang.
      .
  2. users.bb_categories_csv adalah relasi banyak-ke-banyak antara pengguna dan kategori
    • Sama.
      .
  3. Dikonfirmasi:buletin (bbs) tidak ada tanpa pengguna; pengguna mengeluarkan buletin, dan itu memulai seluruh siklus; lalu mengundang balasan dan peringkat.

    3.1 Dikonfirmasi:Benar-benar hanya ada satu papan buletin dan tidak ada sebagai Benda dalam database.

    3.2 Dikonfirmasi:bahwa organisasi tidak akan pernah memiliki lebih dari satu papan buletin, dan klasifikasi serta kategorisasi semuanya ditangani secara memadai oleh tabel/fungsi Kategori

  4. Dihapus.

  5. Dikonfirmasi:Perbedaan antara buletin dan balasan adalah bahwa balasan bergantung pada keberadaan buletin, tidak memiliki judul, dan tidak dikategorikan berdasarkan lokasi atau kategori karena bergantung pada keberadaan buletin itu sendiri.

  6. Dihapus.

  7. Komentar dicatat. Terselesaikan.

7.1. Untuk setiap buletin yang dikirimkan oleh pengguna lain, setiap pengguna dapat memposting lebih dari satu balasan.

7.2. Untuk setiap buletin yang dikirimkan oleh pengguna, pengguna tersebut dapat memposting satu, atau lebih dari satu balasan.

7.3. Dihapus.

7.4. Dihapus.

.
8. Dikonfirmasi:setiap pengguna dapat memposting paling banyak satu peringkat ke buletin (yang dapat dicabut/diubah)
.
9. Dikonfirmasi:setiap pengguna dapat memposting paling banyak satu peringkat ke balasan (ditto)

10.1. Mengingat:nama pengguna berasal dari organisasi dan merupakan nama unik yang mengidentifikasi karyawan. Misalnya email adalah [email protected] - otentikasi dilakukan dengan ldap dan ini diperlukan untuk menghubungkan dan mengambil informasi lain tentang karyawan

  • Dikonfirmasi:UserName adalah Pengenal yang sangat baik

10.2. Dikonfirmasi:FirstName, LastName ... BirthPlace, dll tetap sebagai kolom (tradisional) untuk memastikan People tidak terduplikasi.
.
11. Mengingat:Saat ini kami dapat mengidentifikasi kantor kami dengan nama biasa yang umumnya dikenal dalam organisasi, karena kami hanya memiliki sekitar 3 kantor utama dan banyak kantor lapangan. Jadi contohnya adalah Washington DC atau kantor lapangan virginia. Secara total, saya pikir kami akan mencoba dan mempertahankan total di bawah 20. Saya ingin mencatat alamat yang tepat dari setiap lokasi juga karena itu dapat digunakan untuk mengidentifikasi kantor secara unik kepada pengguna.

  • Tersedia:StateCode+Town sebagai PK; IsMainOffice sebagai boolean.

.
12. Dikonfirmasi:Description dan Name untuk Category diperlukan.
.
13. Mengingat:Pengguna tidak akan dapat memposting ke beberapa kategori. Hanya pengguna dengan hak yang cukup tinggi yang berhak memposting ke kategori tertentu.

  • Disediakan:Permission di User, Location, Category adalah metode untuk mengevaluasi hak tersebut.

.
14. Dikonfirmasi:Location.Administrator adalah UserId admin untuk Location .
.
15. Mengingat:Hanya akan ada kebutuhan untuk suka atau tidak suka. Saya kira tidak perlu ada posisi netral karena ini sama saja tidak memilih? Menyukai tampaknya lebih relevan dengan balasan buletin yang memposting dengan jujur. Yaitu 'saya melihat tanggapan Anda dan alih-alih menulis jawaban saya sendiri, saya hanya akan setuju dengan Anda - papan buletin yang ada adalah sedikit dari aspek sosial dalam organisasi dan saya pikir suka dan tidak suka/setuju dan tidak setuju menciptakan tingkat kontroversi yang mendorong partisipasi . Namun menyukai atau tidak menyukai buletin tidak selalu sepenuhnya tepat.

15.1 Disediakan:Like sebagai boolean di BulletinRating dan ResponseRating . Ini akan membutuhkan interpretasi pada setiap akses.
15.2. Ketika tidak lagi menjadi boolean, itu dapat diubah menjadi RatingCode , dan diimplementasikan sebagai tabel pencarian. Nama-nama tersebut kemudian ditentukan oleh Gabung, dan interpretasi dihilangkan. Saya menggambar ini dalam Model Data Pertama, sehingga Anda dapat melihat apa yang saya maksud15.3. Dihapus di Model Data Kedua.
.
16. Dikonfirmasi:setiap pengguna memiliki Location rumah (selain daftar Locations yang mereka minati).
.
17. Dikonfirmasi:Permission per (13).
.
18. Dikonfirmasi:Izin lebih lanjut mungkin diperlukan, sesuai Model Data.

18.1. Jika Anda melakukannya sekarang, Anda tidak perlu khawatir ketika organisasi memutuskan untuk mencegah Person tertentu dari memposting Responses atau Bulletins , atau Beri peringkat mereka; dan ingin fitur itu diimplementasikan kemarin.

18.2. Bahkan jika Anda tidak menerapkannya, tinggalkan celah di antara nilai-nilai yang Anda terapkan.
.
19 Dikonfirmasi:Bulletins adalah tentang Location .

19.1. Dikonfirmasi:Tidak ada Bulletins tanpa Location

19.2. Dikonfirmasi:Tidak ada Bulletins tanpa Location .

19.3 Dikonfirmasi:Tidak ada Bulletins tanpa User (deklaratif). Namun sejauh ini kami tidak memiliki cara untuk membatasi User; oleh karena itu User dapat memasukkan Bulletins untuk Location any ( Anda dapat membatasinya dalam kode, misalnya ke Locations setiap User Is Interested In .

19.4 Dikonfirmasi:Tidak ada BulletinRatings tanpa Bulletins dan peringkat User .

19.5 Dikonfirmasi:Tidak ada Responses tanpa Bulletins .

19.4 Dikonfirmasi:Tidak ada ResponseRatings tanpa Responses dan peringkat User .

19.7. Tapi, bisa ada User , Lokasi, and Kategori`, secara mandiri.

.
20. Jika Anda tidak keberatan, saya akan memberikan konvensi penamaan, dll. Mereka harus cukup jelas, dan nilainya akan muncul hanya ketika Anda mulai mengkodekan SQL. Silakan bertanya, jika ada yang tidak. Sebagai permulaan, semua nama adalah tunggal. Mixed Case lebih mudah dibaca (Anda seharusnya menggunakan huruf kapital untuk bahasa SQL).

20.1. Pengalaman saya adalah table_name sebagai lawan tableName benar-benar bentuk teknis, dan pengguna tidak menyukainya; Kasus campuran yang konsisten disukai oleh semua orang. Ini adalah salah satu hal yang tidak mungkin diubah, jadi pilihlah dengan hati-hati.
.
21. Untuk kebutuhan Anda untuk mengelompokkan tabel bersama, yang bagus, perlu diingat bahwa itu adalah masalah Fisik. Pada tingkat Model Data Logis, tabel memiliki nama normal, tidak terganggu oleh masalah fisik. Bayangkan bahwa tabel fisik diawali dengan sesuatu seperti (dan harap gunakan huruf besar untuk ini):
- REF_ untuk referensi (seperti Pengguna) dan tabel pencarian
- BUL_ untuk sistem Buletin
.
Saya tidak dapat memberi nama tabel dengan huruf besar? Saya tidak yakin mengapa. Saya tidak tahu mengapa saya tidak dapat memiliki nama tabel huruf besar. Apakah ada hubungannya dengan penggunaan tabel database MyIsam?

.
22. rank (semua) dapat diturunkan langsung dari database (ingat, jangan khawatir tentang kode selama Pemodelan Data). Jika Anda menyimpannya, ini adalah kesalahan Normalisasi; kolom duplikat; yang harus tetap up-to-date; yang bisa tidak sinkron dengan nilai turunan; yang disebut Anomali Pembaruan. Bentuk Normal Kelima menghilangkan Anomali Pembaruan. Itu adalah level Normalisasi minimum saya, jadi itulah yang akan Anda dapatkan dari saya.

22.1. Saya tidak mencampuri masalah urutan atau popularitas sama sekali; sebenarnya, dari suaranya, Anda belum menutup fungsi itu. Saya hanya mengambil data yang berlebihan, peringkat kolom , keluar, sebagai bagian dari proses Normalisasi.

22.2. Berikut ▶Tutorial Cepat◀ pada operator RANK() (seperti yang biasa dikenal). Ini bukan ANSI SQL; itu adalah ekstensi Oracle dan MS. Namun itu tidak diperlukan jika Anda memahami Subqueries, itulah sebabnya Sybase tidak memilikinya. Saya ragu MySQL memilikinya, jadi Anda harus memahaminya. Memahami Subqueries Skalar adalah prasyarat. Sintaks Sybase, jadi masukkan titik koma Anda, dll. Jangan ragu untuk mengajukan pertanyaan spesifik.
.
Saya belum pernah melihat pendekatan penulisan Rank =(PILIH.... Apakah itu sama dengan (PILIH ...) sebagai Peringkat?

.
22.3. Perlu memahami mengapa, tidak ada masalah sama sekali. Hanya anak-anak yang membabi buta mengikuti aturan sederhana, dan Anda tentu bukan salah satunya.
.
23. Dikonfirmasi:users.total_bulletins berlebihan; itu bisa diturunkan. Dihapus.
.
24. Semua PK Anda adalah Id. Apakah Anda belum bosan tersesat dalam kode? Lupakan menempelkan Id iot PK pada semua yang bergerak, mari cari tahu Bagaimana pengguna your Anda Identifikasi Entitas mereka; Entitas mana yang benar-benar Independen, dan lainnya yang bergantung pada Entitas Independen.

24.1. Jangan pernah menggunakan Id atau bentuk semacam itu. Jika ini adalah PK, gunakan formulir lengkap.

24.2. Panggil location_id, location_id, di mana pun itu, termasuk tabel PK. Pengecualiannya adalah ketika Anda perlu menunjukkan peran. Ini akan menjadi jelas dalam Model Data.
.
25. Anda tidak memiliki Integritas Referensial Deklaratif, tidak ada Ditentukan Kunci asing. Itu adalah berita buruk karena berbagai alasan. Setelah pertanyaan-pertanyaan ini diklarifikasi, silakan tambahkan. DRI berarti bahwa sebanyak mungkin, jika tidak semua, Integritas Dideklarasikan dalam SQL. Standar ISO/IEC/ANSI SQL memungkinkan untuk ini, tetapi pasar freeware tidak menyediakan standar, dan perlahan-lahan mengejar. Artinya server tidak akan mengizinkan baris dalam tabel FK untuk ditambahkan kecuali PK ada di tabel induk. MySQL baru-baru ini menyediakan DRI untuk Kunci Asing. Untuk FK, lihat ▶ artikel ini◀ .

25.1. Untuk PERIKSA batasan dan ATURAN, Anda harus mengimplementasikannya dalam kode.

kunci asing saya seperti, users-id(fk) =users.id(pk) Saya tidak yakin bagaimana menambahkannya selain apa yang telah saya lakukan tetapi pasti akan melakukannya setelah saya tahu caranya.

Dua puluh lima. Komentar Dicatat. Saya bukan spesialis MySQL. Ya, itulah masalah yang harus Anda pikirkan sendiri. Secara umum, dari penelusuran saya, MySQL tidak berkaki; untuk apa pun SQL-ish, Anda memerlukan InnoDB.

.
27. Mengingat:Saya telah memikirkan kembali persyaratan penyortiran untuk buletin. Pengguna dapat mengurutkan secara kronologis- mudah, masuk akal. Pengguna dapat mengurutkan buletin berdasarkan tanggal balasan terbaru ke buletin. Kemudian kita bisa melupakan peringkat dan seharusnya sangat mudah untuk mengurutkan buletin secara kronologis pada saat tanggapan terakhir mereka? Apa pendapat Anda.

Buka Masalah

(Nihil)

Model Data

Oke, dengan asumsi Anda tidak memiliki masalah dengan ERD, dan menerapkan semua Masalah Tertutup, saya telah membuat model data, dan menyiapkan Model Data Kelima 09 Des 10 untuk ulasan Anda. Saya pasti membutuhkan lebih banyak umpan balik, pertanyaan, dll, tentang ini. Saya mengalami kesulitan menerima bahwa hal itu dilakukan. Mungkin yang terbaik adalah mulai menulis kode nyata untuk area masalah Anda.

Tautan

▶Tautan ke Notasi IDEF1X◀ Anda benar-benar perlu membaca dan memahami ini, sebelum Anda membaca Model Data.

▶Tautan ke Data Buletin Kelima Model◀ Diagram Relasi Entitas ada di halaman pertama, diikuti oleh Model Data .

  • Kuncinya cukup banyak IDEF1X lurus (kecuali untuk UserId yang saya berikan sebagai tandingan); yang berarti dompet Kunci Relasional. Tidak ditingkatkan dan tidak dioptimalkan untuk pertimbangan Fisik. Sebelum Anda menolaknya, perhatikan terlebih dahulu, daftarkan, dan evaluasi. Tentu saja kami dapat menambahkan Id kunci iot, tetapi sebelum kita melakukannya, pastikan kita memahami apa yang akan hilang dari kita.

  • Perhatikan Pengidentifikasi (garis padat) sesuai dengan dokumen Notasi. Tulang belakang, tulang belakang sistem adalah Location ... Bulletin ... Response .

  • Perhatikan bahwa Keys sebenarnya menerapkan banyak Aturan Bisnis.

  • Perhatikan Hirarki Alami yang telah saya buat. Lihat apakah ada artinya bagi Anda.

  • VerbFrase sangat penting; lihat apakah itu berarti.

Komentar untuk Model dan Respons Data Pertama

Satu pertanyaan yang saya miliki adalah bahwa kunci utama lokasi akan digunakan untuk membentuk kunci utama anak? (mereka digabungkan dengan garis padat) Saya tidak begitu mengerti konsep itu

  • Apa Pengidentifikasi yang baik untuk Buletin ? , apa yang biasanya digunakan pengguna Anda untuk Mengidentifikasi Buletin ...
  • "apakah Anda melihat buletin dari Virginia FO kemarin?",
  • "Sally dari Washington pasti menulis buletin yang bagus", dll.

atau mengapa tidak ada hubungan antara pengguna dan buletin?

  • Sesuai maksud yang dinyatakan lebih lanjut di atas, karena sekarang saya telah menunjukkan Peringkat sebagai tabel dan seperti apa renderingnya, sekali, saya akan menghapusnya

  • Saya pikir Izin harus menjadi Entitas.

  • Bulletins PK sekarang (StateCode, Town, UserId, SequenceNo) . Untuk lebih jelasnya, SequenceNo berada di dalam StateCode, Town, UserId :itu akan menjadi 5 untuk buletin ke-5 Sally tentang MO/Billngs FO.

  • Perhatikan bahwa Pengaturan pengguna BulletinsPerPage ,dll, adalah 1::1 dengan User , jadi mereka berada di User; tabel anak akan salah.

  • Kesalahan tipografi diperbaiki.

Komentar untuk Model dan Respons Data Kedua

  • PK untuk kedua Bulletins dan Responses telah diubah untuk mencerminkan (7). BulletinNo dan ResponseNo telah diganti dengan BulletinDate dan ResponseDate (yang dulunya CreatedDate ), untuk mengizinkan beberapa balasan per User per Bulletins .

Komentar untuk Model dan Respons Data Ketiga

Percayalah Anda telah istirahat dengan baik.

  1. Setidaknya 30 tahun yang lalu (yang saya ketahui), para raksasa di industri ini pernah berdebat. Nama selalu tunggal. Tabel adalah kata benda. VerbFrase adalah kata kerja. Ini tidak terbatas pada konvensi penamaan db, ini berlaku untuk dokumen, tesis, disertasi, dll. Anda mungkin memiliki 5 kesimpulan di akhir dokumen, tetapi judul bagian atau bab, baik di ToC dan bagian atas halaman adalah "Kesimpulan".

    Setelah melawan mereka sepanjang jalan melalui Uni, segera setelah saya memulai pekerjaan pemrograman berbayar pertama saya, dan melihat pentingnya aturan di dunia nyata, yang bertentangan dengan argumen teoretis yang kami miliki di perguruan tinggi, saya menyerah sebagai pemborosan. waktu. Semua waktu dan tenaga yang saya buang terbuang untuk melakukan pekerjaan yang produktif. Sejak itu, saya tidak mempertanyakan raksasa; saya terima saja. Bahwa pikiran mereka lebih besar dari saya. Ini seperti menerima Standar, atau berperilaku dalam hukum, atau Tuhan. Saya tidak punya alasan yang sangat, sangat bagus untuk melakukan sesuatu yang ilegal.

    Bagaimanapun, kemudahan bahasa (diskusi, SQL, dokumentasi) yang didukung oleh aturan tersebut tidak dapat dijelaskan secara memadai; saat Anda menulis lebih banyak dan lebih banyak kode SQL, itu akan menjadi jelas.

    Anda selalu bebas menggunakan apa pun yang Anda inginkan. Saya hanya mengirim tunggal.

  2. Baik dengan saya.

    Namun perlu Anda ingat, kedua elemen tersebut, dalam urutan yang teridentifikasi (ala Non-PK Unique Index, atau Alternate Key) secara universal diperlukan untuk menetapkan Uniqueness for a Person. Menghapusnya akan menghasilkan dua hal. Pertama, Anda tidak lagi dapat mengidentifikasi keunikan di seluruh User (dan dengan demikian Anda mungkin memiliki baris duplikat). Kedua, AK menjadi tidak unik, sebuah Entri Inversi.

  3. Intinya adalah (berlawanan dengan salah satu posting), kolom apa saja yang 1::1 dengan User PK, harus berada diUser . Semua pengaturan preferensi. Karena kami membersihkanInterestedLocations danInterestedCategories , saya hanya tahuBulletinsPerPage tersisa; tapi saya yakin ada orang lain. IsPreference2 adalah misalnya. dari boolean;NumPreference3 adalah misalnya. dari sebuah bilangan bulat. Dll. Anda dapat memberi tahu saya apa itu Preferensi sebenarnya.

    (Mari kita coba dalam bentuk jamak:... kolom apa saja yang 1::1 denganUsers PK, harus berada diUsers . Hanya tidak melakukannya untuk saya, saya terpaku pada bahasa Inggris yang rusak, dan saya sedikit berharga tentang bahasa ibu saya.)

    Model Data Diperbarui.

  4. Bagus sekali. Beri tahu saya ketika Anda merasa nyaman dengan itu, dan saya akan memberi Anda Model Fisik.

    Bagaimana dengan VerbFrase?

Komentar ulang 06 Des 10 20:38 EST (Pembaruan Kecil)

.
28. Dimana hanya ada satu kemunculan PK sebagai FK tentunya nama kolom FK sama dengan nama kolom PK. Namun, ketika ada lebih dari satu occ dari FK (lihat ResponseRating ), ada tiga UserIds ), kita perlu membedakannya. Dalam terminologi IDEF1X ini disebut Peran. Peran User yang mengeluarkan Bulletins adalah Issuer , dan seterusnya. Jelas lebih baik menggunakan nama itu, dan tetap konsisten di seluruh hierarki (bukan UserId di Bulletins dan kemudian ketika kita sampai ke Response , di mana ada dua, dan diferensiasi diminta, ubah ke IssuerId . Saya pikir Anda mungkin memiliki masalah dengan itu; pada tahap awal, penggunaannya adalah Issuer.UserId sehingga benar-benar jelas UserId sebagai FK, dan Perannya adalah Issuer; ketika kita sampai ke model fisik, itu disederhanakan menjadi IssuerId .

Demikian juga, kami memiliki banyak kolom DateTime (Date untuk pendek jika Anda suka; jika tidak Dtm), yang perlu dibedakan.
.
29. Apakah dokumen Notasi IDEF1X tidak masuk akal?

  • PK untuk setiap tabel berada di atas garis, dalam urutan yang ditentukan.
  • Ingat kita membawa PK dari tabel induk, dan jika ada artinya, menggunakan FK tersebut untuk membentuk PK anak.
  • Untuk Bulletins :

    • Lokasi FK (StateCode, Town) yang dikeluarkan
    • UserId dari Emiten
    • dan DateTime diterbitkan, untuk membuatnya unik.
    • oleh karena itu (Kode Negara, Kota, IssuerId, BulletinDate)`
  • Untuk menghapus semua ResponseRatings untuk Bulletins ini , gunakan WHERE = pada keempat Bulletins kolom.

.
30. Karena (State, Town) adalah PK dari Location , dibawa kemana-mana. Dan itu merupakan bagian dari Bulletin PK, jadi setiap tabel dependen membawa kolom tersebut karena mereka membawa Bulletins PK

Kami sebelumnya telah mengidentifikasi bahwa (State, Town) adalah PK, Saya akan membiarkannya apa adanya Lihat (38) untuk perubahan.

.
33. Diskusi yang layak. Ya, jika Anda akan menampilkannya saat (misalnya) menampilkan Responses , dan pengguna memahami UserName . Tidak, jika 30 byte, dan ada juga UserId 4 byte yang unik . Idenya adalah untuk membuat pilihan ini secara sadar, menyadari apa yang Anda menyerah, ketika Anda akhirnya memutuskan bahwa beberapa 6 kolom kunci 30-byte terlalu rumit untuk bermigrasi ke anak-anak.

  • Saya sudah menyatakan di awal, saya akan menggunakan UserId sebagai Id typical Pk, karena dibawa/dimigrasikan ke beberapa tabel anak.
  • Kita dapat meninggalkan cara pembuatannya untuk nanti. Tapi itu adalah PK Pengganti murni.

.
34. Tidak masalah. Category sudah memilikinya. Saya akan mengubah Order ke ListOrder .

.
35. Tentu. Berdasarkan apa yang saya baca dan dengar, saya cukup senang dengan itu. Tapi saya ingin lebih bolak-balik untuk mencapai kepercayaan diri, sebelum Anda menulis kode. Sebagai alternatif, lihat itu sebagai pengalaman belajar, dan terima bahwa model dan kode dapat berubah nanti. Apakah Anda ingin saya memproduksi Fisik sekarang? Jika Anda memberi saya salah satu dan semua koreksi, saya akan menerbitkan versi berikutnya. Saya mengharapkan preferensi di User . Juga, jalankan fungsi dengan cepat dan periksa apakah Anda memiliki semua kolom yang Anda butuhkan.

Lihatlah beberapa jawaban lain, untuk tujuan pembelajaran, dan minat.

.
36. Bergabung. Anda baru saja bergabung di four tiga kolom sebagai lawan satu. SQL rumit dengan gabungan, dan sintaks baru yang seharusnya membuatnya lebih mudah, sebenarnya lebih rumit. Pembuat kode saya tidak pernah menulis gabungan:kami menghemat waktu dan kesalahan ketik. Saya memiliki proc yang memberikan dua atau lebih tabel, akan menghasilkan kode dengan semua kolom dan bergabung. Saya tidak cukup tahu tentang MySQL untuk mengonversinya untuk Anda.

Model Data Diperbarui.
.

Komentar ulang 08 Des 10 20:49, Model Data Keempat dan Respons

.
Periksa bagian sebelumnya tepat di atas, ada sedikit pembaruan.

IDEF1X:Kecepatan Anda baik-baik saja.

Perhatikan anak selalu “mewarisi” PK Induk, sebagai FK (baik garis lurus maupun putus), jika tidak maka tidak ada Hubungan di antara keduanya. Dengan menggunakan kolom-kolom yang ada pada anak tersebut, untuk membentuk PK anak, kita membawa makna (dan itulah perbedaan antara padat dan rusak). Dan dengan demikian kita tidak perlu mencari Pengenal independen untuk anak tersebut. Kekuatan relasional dalam metode ini akan menjadi jelas nanti, saat Anda melakukan pengkodean.

Bagian yang kita bahas adalah tentang Identifier :alami vs tidak wajar; bermakna vs tidak berarti. Nanti Anda akan melihat bagaimana kita dapat menggunakan kemampuan Relasional dari mesin, ketika PK anak dibentuk dari PK induk. (Bukankah nama belakangmu sama dengan nama ayahmu?)

Penting juga untuk memahami database relasional dan kemampuannya. Itu hilang ketika kita mendekati database (misalnya) dari perspektif OO, dan memperlakukannya sebagai lokasi untuk membuat kelas kita "persisten". Oleh karena itu, kami akan mencoba mempelajari dan menggunakan istilah relasional. Menjadi sulit ketika Anda pergi ke Prancis dan berharap mereka berbicara bahasa Amerika, dan menggunakan mata uang yang sama; belajar berbicara 10 kata bahasa Prancis, dan mereka menyambut Anda dengan tangan terbuka, dan Anda akan memiliki pengalaman yang sangat berbeda dengan penduduk setempat.

Bagaimanapun, lanjutkan dengan menerapkan model. Sadarilah bahwa kita mungkin akan membuat perubahan di beberapa titik. Simpan semua DDL Anda. Simpan semua data pengujian Anda sebagai pernyataan penyisipan atau sebagai cadangan tabel atau ekspor format karakter (tidak tahu apa yang dapat/tidak dapat dilakukan MySQL di area ini)..
37.1. Ditangani, Hubungan n::n dengan Office &Category . Anda hanya akan "melihat" itu saat kita membahas Model Fisik.

37.2. Selesai.

37.3 Selesai.
.
38. Bagus sekali. Lebih pendek juga. Perhatikan bahwa mereka tidak akan pernah dapat memiliki dua Office dalam Kode Pos yang sama. NUMERIC(5,0) bagus, tapi saya pikir AS bergerak menuju 7 digit. Tidak masalah, Anda bisa mengetahuinya; ini adalah PK yang sangat baik untuk Office . Sekarang kolom ini, yang merupakan bagian dari Address , mungkin ZipCode , telah ditingkatkan ke tujuan yang lebih tinggi, tanpa duplikasi; karena kami membawanya dalam 5 tabel anak, dan kami ingin nama PK menjadi jelas, sesuai dengan konvensi yang dijelaskan sebelumnya, kami akan menyebutnya OfficeCode; OfficeZipCode mungkin konyol.

Kami membutuhkan Indeks Unik pada Name untuk memastikan mereka tidak menambahkan dua Office dengan nama yang sama. Catatan, untuk tujuan penjelasan, ini sebenarnya adalah kunci logis Office , menggantikan (StateCode, Town) , dan tetap demikian.

Saya masih berpikir Anda mungkin memerlukan StateCode dan Town sebagai referensi cepat (selain duduk di suatu tempat di Address )

Model Data diperbarui, Kelima sekarang tersedia untuk ditinjau. Anda tidak menyatakan preferensi Anda, untuk ...Date vs ...Dtm . Saya akan menggunakan yang terakhir, karena lebih spesifik, mengidentifikasi komponen waktu juga. Mudah diubah.

Jawaban ini telah mencapai panjang maksimum. Bersambung di "Bagian II"



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengubah kode MySQL menjadi pernyataan PDO?

  2. Bagaimana cara menentukan bidang kueri induk dari dalam subkueri di MySQL?

  3. SQL Tidak dapat membuat tabel (errno:150)

  4. Mengapa `log_slow_queries` merusak `my.cnf`?

  5. Mengambil baris yang ditambahkan satu jam terakhir