Panduan pemula untuk desain basis data SQL [ditutup]

127

Apakah Anda tahu sumber yang bagus untuk belajar bagaimana merancang solusi SQL?

Di luar sintaks bahasa dasar, saya sedang mencari sesuatu untuk membantu saya memahami:

  1. Tabel apa yang akan dibuat dan bagaimana menautkannya
  2. Cara mendesain untuk skala yang berbeda (aplikasi klien kecil ke situs web besar yang didistribusikan)
  3. Cara menulis kueri SQL yang efektif / efisien / elegan
ripper234
sumber

Jawaban:

60

Saya mulai dengan buku ini: Desain Basis Data Relasional Jelas Dijelaskan (Seri Morgan Kaufmann dalam Sistem Manajemen Data) (Paperback) oleh Jan L. Harrington dan merasa sangat jelas dan bermanfaat

dan seiring dengan bertambahnya kecepatan, yang ini juga bagus Sistem Basis Data: Pendekatan Praktis untuk Desain, Implementasi dan Manajemen (Seri Ilmu Komputer Internasional) (Paperback)

Saya pikir desain SQL dan database berbeda (tapi saling melengkapi).

DD59
sumber
1
Desain Awal Database: Dari Novice hingga Professional - Clare Churcher?
antusias
40

Saya mulai dengan artikel ini

http://en.tekstenuitleg.net/articles/software/database-design-tutorial/intro.html

Ini cukup ringkas dibandingkan dengan membaca seluruh buku dan menjelaskan dasar-dasar desain basis data (normalisasi, jenis hubungan) dengan sangat baik.

Julius
sumber
Cintai panduan ini, Terima kasih.
Nona
Tautan dalam jawaban ini tidak lagi berfungsi.
Grizzly Peak Software
1
Tampaknya tautan tersebut berfungsi kembali.
user8576017
1
Tautan tidak lagi berfungsi
jat255
28

Pengalaman sangat penting, tetapi dalam hal desain tabel Anda dapat belajar banyak dari bagaimana ORM seperti Hibernate dan Grails beroperasi untuk melihat mengapa mereka melakukan sesuatu. Sebagai tambahan:

  1. Pisahkan jenis data yang berbeda - jangan menyimpan alamat di tabel pesanan Anda, tautkan ke alamat di tabel alamat yang terpisah, misalnya.

  2. Saya pribadi suka memiliki bilangan bulat atau kunci pengganti yang panjang pada setiap tabel (yang menyimpan data, bukan yang menautkan tabel yang berbeda bersama-sama, hubungan e, g., M: n) yang merupakan kunci utama.

  3. Saya juga suka memiliki kolom cap waktu yang dibuat dan dimodifikasi.

  4. Pastikan bahwa setiap kolom yang Anda lakukan "di mana kolom = val" dalam kueri apa pun memiliki indeks. Mungkin bukan indeks yang paling sempurna di dunia untuk tipe data, tetapi setidaknya indeks.

  5. Siapkan kunci asing Anda. Juga atur ON DELETE dan ON MODIFY aturan mana yang relevan, baik kaskade atau set null, tergantung pada struktur objek Anda (jadi Anda hanya perlu menghapus sekali pada 'kepala' dari pohon objek Anda, dan semua sub-objek objek mendapatkan dihapus secara otomatis).

  6. Jika Anda ingin memodernisasi kode Anda, Anda mungkin ingin membuat modularise skema DB Anda - mis., Ini adalah area "pelanggan", ini adalah area "pesanan", dan ini adalah area "produk", dan menggunakan tabel join / link di antara mereka, bahkan jika itu adalah relasi 1: n, dan mungkin menduplikasi informasi penting (yaitu, menduplikasi nama produk, kode, harga ke tabel order_details Anda). Baca tentang normalisasi.

  7. Orang lain akan merekomendasikan hal yang sebaliknya untuk beberapa atau semua hal di atas: p - tidak pernah ada cara yang benar untuk melakukan beberapa hal eh!

Astaga
sumber
1
ORM, semua poin Anda anti-database .
PerformanceDBA
1
Menambahkan indeks tidak selalu berarti lebih cepat. Terkadang mereka benar-benar membuat kueri lebih lambat. Itu benar-benar tergantung pada permintaan dan Anda harus mengujinya dengan explain analyzeapakah suatu indeks menguntungkan.
ArashM
2

Ini adalah pertanyaan yang, menurut pendapat saya, membutuhkan pengetahuan yang berbeda dari domain yang berbeda.

  1. Anda tidak dapat mengetahui terlebih dahulu tabel "mana" yang akan dibangun, Anda harus mengetahui masalah yang harus Anda selesaikan dan merancang skema yang sesuai;
  2. Ini adalah campuran dari keputusan desain database dan kemampuan kustom vendor database Anda (mis. Anda harus memeriksa dokumentasi (r) dbms Anda dan akhirnya mempelajari beberapa "tips & trik" untuk penskalaan), juga konfigurasi dbms Anda sangat penting untuk scaling (replikasi, partisi data dan sebagainya);
  3. sekali lagi, hampir setiap rdbms hadir dengan "dialek" tertentu dari bahasa SQL, jadi jika Anda ingin query yang efisien, Anda harus mempelajari dialek tertentu --btw. sangat mungkin menulis permintaan elegan yang juga efisien adalah masalah besar: keanggunan dan efisiensi adalah tujuan yang saling bertentangan--

Yang mengatakan, mungkin Anda ingin membaca beberapa buku, secara pribadi saya telah menggunakan buku ini di kursus basis data universitas saya (dan menemukan yang layak, tetapi saya belum membaca buku-buku lain di bidang ini, jadi saran saya adalah untuk memeriksa beberapa buku bagus dalam desain basis data).

cheng81
sumber
2

Sudah lama sejak saya membacanya (jadi, saya tidak yakin seberapa banyak itu masih relevan), tetapi ingatan saya adalah bahwa buku SQL for Smarties karya Joe Celko memberikan banyak info tentang penulisan pertanyaan yang elegan, efektif, dan efisien .

pengguna29208
sumber
edisi keempat 2010 mungkin terkini
baca
1
Buku Celko adalah studi tentang kesalahan, dan lebih jauh gagasan menerapkan dalam kode, apa yang harus diimplementasikan dalam database.
PerformanceDBA