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

Struktur tabel database SQL seperti polimorfik

Buku Craig Larman "Menerapkan UML dengan Pola" menjelaskan 3 solusi umum untuk masalah ini.

Contoh Anda tidak terlalu membantu - tidak ada alasan logis untuk memiliki 3 cara berbeda dalam mengelola nama seseorang di database Anda (meskipun ini sering terjadi karena keanehan impor/ekspor data).

Namun, sangat umum ada entitas "orang" yang mungkin merupakan karyawan (dengan employee_id), kontak (dengan tautan ke tabel prospek), atau pelanggan (dengan customer_id dan tautan ke tabel pesanan) .

Dalam buku Larman, ia memberikan 3 solusi.

Satu meja untuk mengatur semuanya Di sini, Anda membuat satu tabel dengan semua kolom yang diketahui. Ini menciptakan tabel yang berantakan, dan mendorong tanggung jawab untuk mengetahui aturan untuk mempertahankan setiap subkelas ke lapisan aplikasi - database tidak akan memaksakan kebutuhan pelanggan untuk memiliki customer_id. Namun, ini membuat penggabungan menjadi lebih mudah - tabel apa pun yang perlu ditautkan ke seseorang dapat, yah, menautkan ke tabel orang.

Tabel kelas super Ini membersihkan semuanya dengan mengekstraksi atribut umum ke dalam satu tabel - mis. "person" - dan mendorong bidang khusus subkelas ke tabel subkelas. Jadi, Anda mungkin memiliki "orang" sebagai tabel kelas super, dan tabel "kontak", "karyawan" dan "pelanggan" dengan data subkelas tertentu. Tabel subclass memiliki kolom "person_id" untuk ditautkan kembali ke tabel superclass. Ini lebih kompleks - biasanya memerlukan gabungan tambahan saat mengambil data - tetapi juga jauh lebih sedikit rawan kesalahan - Anda tidak dapat secara tidak sengaja merusak model data dengan bug yang menulis atribut tidak valid untuk "karyawan".

Tabel per subkelas - ini adalah apa yang telah Anda jelaskan. Ini memperkenalkan cukup banyak duplikasi ke dalam model data, dan Anda sering memiliki gabungan bersyarat - "bergabung di tabel x jika tipe orang =y", yang dapat membuat kode akses data menjadi rumit.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan SSHTunelForwarder untuk terhubung ke db MySQL melalui SSH

  2. Praktik terbaik untuk sistem Janji Temu/Pemesanan PHP/MySQL

  3. Bagaimana algoritma peringkat Reddit dan Hacker News digunakan?

  4. Apakah ada fungsi di MySQL yang akan memampatkan hasil yang dikembalikan dari kueri?

  5. Selesaikan posting hari ini tetapi setidaknya 20 menit lebih lama