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

Menerapkan subtipe tipe super dengan benar di MySQL

Tabel "pesta" tidak terlihat benar. Bandingkan dengan kode sumber dari pertanyaan SO lainnya ini .

Dalam struktur semacam ini, nomor id partai memang menyebar ke bawah, sehingga untuk berbicara. Biasanya harus berupa kunci utama atau kunci asing dalam tabel yang menyimpan data tentang seseorang.

Di "pelaporan" tabel Anda, sepertinya kunci utama tidak boleh 'partyid'. Itu akan memungkinkan hanya satu baris per karyawan, yang menurut saya tidak Anda maksudkan. (Saya bisa saja salah.) Jika saya benar tentang itu, Anda dapat mempertimbangkan NOT NULL UNIQUE batasan pada {partyid, date}, dan PRIMARY KEY kendala pada kolom baru, 'laporan'. Tabel "perjalanan" dan "kinerja" mungkin akan merujuk 'laporan'. (Tapi teruslah membaca.)

Ada tempat dalam diagram Anda di mana entitas mendapatkan kunci tambahan:perusahaan Anda memberikan nomor id karyawan yang unik kepada karyawannya, misalnya. Tidak ada alasan teoretis Anda tidak dapat menggunakan 'employid' alih-alih 'partyid' sejak saat itu untuk merujuk karyawan. Tapi ada ada alasan praktis Anda mungkin tidak ingin melakukan itu. Ini meningkatkan jumlah bergabung.

Misalnya, jika tabel "kredensial", "alat", "sertifikasi", "akademik", dan "kepatuhan" merujuk employee.employid alih-alih employee.partyid, Anda tidak bisa hanya menggabungkan "compliance" dan "party" ke mendapatkan nama orang tersebut. Anda juga harus bergabung dengan "karyawan".

Mereka harus memiliki kunci utama; kunci utama tidak harus berupa nomor id. Jika ada kunci alami yang ada, Anda harus mengidentifikasinya dan tetap mendeklarasikannya UNIK.

Tabel "pesanan" mungkin hanya memiliki "orderid" sebagai kunci utamanya; menggunakan referensi kunci asing untuk mengidentifikasi pelanggan. Dalam beberapa kasus, masuk akal untuk mengganti nama kolom. Dalam kasus pelanggan, mungkin masuk akal untuk memanggil kuncinya 'customerid' daripada 'parytid'. Saya akan membuat domain sendiri.

create domain PARTY_ID as integer not null;

Kemudian, di mana pun yang membutuhkan nomor id pesta, saya akan menggunakan domain sebagai gantinya.

create table customers (
    customerid PARTY_ID primary key references parties (partyid),
...

Saya lebih suka melihat tabel manajer juga. Referensi untuk itu akan menjamin bahwa manager.managerid akan memutuskan untuk manajer yang sebenarnya, bukan hanya untuk karyawan mana pun.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengisi acara dalam javascript kalender penuh dari database

  2. mysql pivoting - bagaimana saya bisa mengambil data dari tabel yang sama ke kolom yang berbeda?

  3. masukkan beberapa baris menggunakan satu nilai forigenk dalam formulir

  4. Mengapa PDO mencetak kata sandi saya ketika koneksi gagal?

  5. Kode unik berdasarkan alamat email unik di tabel mysql?