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

Kunci asing untuk beberapa tabel dan kolom?

Anda tidak harus menyertakan nama item di kedua tabel. Ini disebut solusi denormalisasi. Anda harus memilikinya hanya di tabel item dan hanya merujuk ke id, kemudian jika Anda membutuhkan nama juga, Anda dapat menggabungkannya berdasarkan kunci utama (id). Jika tidak, itu benar-benar OK di saya pendapat.

CREATE TABLE user(
  id INT(11) NOT NULL AUTO_INCREMENT,
  username VARCHAR(50) NOT NULL,
  password VARCHAR(20) NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE items(
  i_id INT(11) NOT NULL AUTO_INCREMENT,
  name TINYTEXT NOT NULL,
  price DECIMAL(8,2) NOT NULL,
  PRIMARY KEY (i_id)
);

CREATE TABLE user_purchase(
  i_id INT(11) NOT NULL,
  name TINYTEXT NOT NULL,
  id INT(11) NOT NULL,
  FOREIGN KEY (i_id) REFERENCES items(i_id),
  FOREIGN KEY (id) REFERENCES user(id)
);

Terkadang ketika kinerja sangat penting, Anda harus menggunakan tabel yang didenormalisasi. Ini bisa jauh lebih cepat.

Normalisasi penting untuk menghindari anomali yang berbeda. Jika Anda memiliki tabel dalam bentuk normal tingkat tinggi maka tabel Anda tidak akan berlebihan dan tidak akan memiliki anomali ini. Misalnya, jika Anda memiliki sesuatu yang disimpan di beberapa lokasi, Anda harus menjaga agar semua data yang berlebihan tetap mutakhir. Ini memberi Anda kesempatan untuk melakukan kesalahan ini dan berakhir dengan anomali yang berbeda.

Dalam situasi Anda memiliki kunci asing membantu Anda untuk menjaga integritas data tetapi tanpa kunci asing untuk nama Anda akan dapat memiliki item dengan nama dalam pembelian yang tidak ada di tabel item.

Ini semacam anomali.

Ada banyak jenisnya, sebaiknya hindari sebisa mungkin.

Baca selengkapnya di sini tentang anomali

Dalam beberapa kasus Anda harus melakukan denoramaalisasi. Jadi simpan beberapa data secara berlebihan karena masalah kinerja. Dengan cara ini Anda dapat menghemat beberapa operasi gabungan yang dapat menghabiskan banyak waktu.

Detail normalisasi dicakup oleh topik bentuk normal yang berbeda:NF0, NF1, NF2, NF3 dan BCNF

Detail formulir normal

Untuk detail lebih lanjut tentang dasar matematika dari dekomposisi tanpa kehilangan ke bentuk normal yang lebih tinggi, lihat "Ketergantungan fungsional". Ini akan membantu Anda memahami mengapa Anda dapat menyimpan id "berlebihan". Sebenarnya mereka adalah redundansi yang diperlukan, karena Anda membutuhkannya agar nantinya dapat membangun kembali kumpulan data asli. Ini akan menjadi definisi untuk bentuk normal yang berbeda. Berapa tingkat redundansi ini yang diperbolehkan?

Ketergantungan Fungsional



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan MySQL - #1062 - Entri duplikat ' ' untuk kunci 2

  2. java.sql.SQLException:Tidak ada database yang dipilih - mengapa?

  3. MySQL Recursive dapatkan semua anak dari orang tua

  4. Cara Menghitung Pengguna Aktif Bulanan (MAU) di MySQL

  5. Cara apa pun untuk mencapai pencarian seperti teks lengkap di InnoDB