Rumah > pembangunan bahagian belakang > tutorial php > Reka bentuk denormalisasi pangkalan data: aplikasi dalam pengaturcaraan PHP

Reka bentuk denormalisasi pangkalan data: aplikasi dalam pengaturcaraan PHP

PHPz
Lepaskan: 2023-06-22 19:14:01
asal
945 orang telah melayarinya

Dengan perkembangan pesat teknologi Internet, pangkalan data, sebagai pusat penyimpanan dan pengurusan data, telah menjadi bahagian yang amat diperlukan dalam era maklumat moden. Apabila mereka bentuk pangkalan data, ramai pembangun akan berharap untuk berada sedekat mungkin dengan teori reka bentuk piawai pangkalan data supaya struktur jadual data adalah munasabah, piawai dan mudah untuk penyelenggaraan dan pertanyaan. Walau bagaimanapun, dalam beberapa kes, penyahnormalan juga merupakan teknik yang sangat berguna untuk mengoptimumkan kecekapan penyimpanan data dan capaian melalui data berlebihan dan organisasi data yang betul. Dalam pengaturcaraan PHP, reka bentuk anti-paradigma boleh meningkatkan prestasi dengan ketara, mengurangkan beban mesin pangkalan data, meningkatkan skalabiliti pangkalan data, dan memendekkan kitaran pembangunan Artikel ini akan menerangkan PHP dari aspek prinsip reka bentuk anti-paradigma, pelaksanaan dan senario yang berkenaan menggunakan reka bentuk de-paradigma dalam pengaturcaraan.

1. Reka bentuk ternormal dan reka bentuk dinyahnormalkan

Apabila mereka bentuk pangkalan data, reka bentuk ternormal yang munasabah bertujuan untuk menjadikan struktur jadual data lebih piawai, ringkas dan tepat, memudahkan operasi, Mengurangkan pembangunan kesukaran dan lebihan data, dan meningkatkan penghantaran dan keselamatan data. Teori normalisasi pangkalan data terutamanya mempunyai beberapa tahap seperti 1NF (bentuk normal pertama), 2NF (bentuk normal kedua), 3NF (bentuk normal ketiga), dan lain-lain, yang menyekat keatoman atribut, kebergantungan hubungan antara entiti dan aspek redundansi .

Reka bentuk nyahnormalisasi ialah konsep yang bertentangan Ia bertujuan untuk meningkatkan prestasi pangkalan data dengan meningkatkan beberapa lebihan data, mengoptimumkan pertanyaan dan mempercepatkan Ini dicapai terutamanya melalui penyahnormalan, seperti membahagikan kepada beberapa jadual untuk mengurangkan JOIN operasi semasa membuat pertanyaan, atau menyimpan data berlebihan dalam berbilang jadual untuk mengelakkan JOIN semasa mengemas kini. Walau bagaimanapun, reka bentuk anti-paradigma juga mempunyai had tertentu Dalam kebanyakan kes, reka bentuk paradigma yang cemerlang masih menjadi pilihan pertama.

2. Senario aplikasi reka bentuk penyahnormalan

Prinsip yang harus diikuti dalam reka bentuk penyahnormalan ialah apabila menimbang reka bentuk, keperluan pembangun dan keperluan berorientasikan pengguna perlu diambil kira.

  1. Senario dengan keperluan pertanyaan yang tinggi

Apabila pertanyaan kerap diperlukan, menggunakan reka bentuk penyahnormalan boleh mengoptimumkan kecekapan pertanyaan dan mengurangkan operasi JOIN dan pertanyaan berbilang lapisan, dsb. Pertanyaan yang tidak diperlukan , seperti maklumat log masuk pengguna, butiran pesanan, dsb. boleh dimuatkan ke dalam cache terlebih dahulu dan output terus apabila halaman dipaparkan.

  1. Apabila pangkalan data mempunyai jumlah penulisan atau akses yang tinggi

Menggunakan reka bentuk penyahnormalan boleh mengurangkan tekanan pada pangkalan data dan memisahkan beberapa data yang tidak perlu diubah menjadi Pada berbilang jadual, elakkan kunci semasa menulis Contohnya, harga produk, penerangan teks tertentu, dsb. boleh dicache di suatu tempat dahulu, dan kemudian diambil daripada cache apabila benar-benar menulis.

  1. Senario di mana sesetengah data perlu dikemas kini/dipadamkan dalam masa

Menggunakan reka bentuk penyahnormalan juga boleh mengelakkan situasi di mana KEMASKINI dan PADAM terlalu tidak cekap. Apabila jumlah data adalah besar, operasi KEMASKINI dan PADAM akan menggunakan banyak sumber Menggunakan reka bentuk penyahnormalan, sesetengah data boleh ditulis ke dalam berbilang jadual untuk mencapai pemprosesan teragih dan kemas kini/pemadaman separa.

3. Bagaimana untuk menggunakan reka bentuk de-paradigma dalam pengaturcaraan PHP?

Yang berikut menggunakan contoh pengaturcaraan PHP khusus untuk menunjukkan cara menggunakan reka bentuk penyahnormalan:

  1. Premis: Nombor pesanan, ID produk, nama produk, dll. perlu dipaparkan pada halaman butiran pesanan Harga unit produk, kuantiti produk, jumlah kecil produk. Terdapat dua jadual, jadual pesanan dan jadual produk Jadual pesanan mengandungi medan nombor pesanan, ID produk dan kuantiti produk, dan jadual produk mengandungi medan ID produk, nama produk dan harga unit produk.
  2. Penyelesaian reka bentuk biasa: Pesanan pertanyaan dan maklumat produk yang sepadan dengan menyambungkan dua jadual. Seperti yang ditunjukkan di bawah:
SELECT order_no, product_id, product_name, product_price, product_qty, (product_price * product_qty) AS sub_total 
FROM order_tbl
LEFT OUTER JOIN product_tbl
ON order_tbl.product_id = product_tbl.product_id
WHERE order_no = '1001';
Salin selepas log masuk
  1. Pelan reka bentuk penyahnormalan: Melebihkan nama produk dan medan harga unit produk dalam jadual pesanan kepada jadual pesanan untuk mengurangkan operasi Sertai semasa pertanyaan . Seperti yang ditunjukkan di bawah:
SELECT order_no, product_id, product_name, product_price, product_qty, (product_price * product_qty) AS sub_total 
FROM order_tbl
WHERE order_no = '1001';
Salin selepas log masuk
  1. Langkah pelaksanaan:

(1) Buat dua jadual: order_tbl dan product_tbl.

CREATE TABLE `order_tbl` (
  `order_no` varchar(100) NOT NULL,
  `product_id` int(11) NOT NULL,
  `product_qty` int(11) NOT NULL,
  `product_name` varchar(100) DEFAULT NULL,
  `product_price` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`order_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `product_tbl` (
  `product_id` int(11) NOT NULL,
  `product_name` varchar(100) NOT NULL,
  `product_price` decimal(10,2) NOT NULL,
  PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Salin selepas log masuk

(2) Terdapat dua medan berlebihan dalam pesanan_tbl jadual pesanan: nama_produk dan harga_produk.

ALTER TABLE `order_tbl` ADD COLUMN `product_name` VARCHAR(100) NOT NULL DEFAULT '';
ALTER TABLE `order_tbl` ADD COLUMN `product_price` DECIMAL(10,2) NOT NULL DEFAULT '0.00';
Salin selepas log masuk

(3) Semasa menulis pesanan, tulis data ke order_tbl dan cache table cache_tbl.

//写入订单表
$sql = "INSERT INTO order_tbl(order_no, product_id, product_qty, product_name, product_price) 
        VALUES ('$order_no', $product_id, $product_qty, '$product_name', $product_price)";

//写入缓存表
$sql_cache = "INSERT INTO cache_tbl(key_name, cache_value) 
              VALUES ('product_info_${product_id}','{"product_name":"${product_name}", "product_price":"${product_price}"}')";
Salin selepas log masuk

(4) Apabila membuat pertanyaan pesanan, mula-mula dapatkan nama produk dan harga daripada jadual cache cache_tbl Jika ia tidak wujud dalam cache, tanya ia daripada jadual produk product_tbl dan cache dalam cache_tbl.

$redis = new Redis(); 
$redis->connect('127.0.0.1', 6379);

$key_name = "product_info_${product_id}";
if ($redis->exists($key_name)) {
  $cache_data = json_decode($redis->get($key_name), true);
  $product_name = $cache_data['product_name'];
  $product_price = $cache_data['product_price'];
} else {
  $sql = "SELECT product_name, product_price FROM product_tbl WHERE product_id=$product_id";
  $result = mysqli_query($conn, $sql);
  $row = mysqli_fetch_array($result);
  $product_name = $row['product_name'];
  $product_price = $row['product_price'];
  $redis->set($key_name, json_encode(['product_name'=>$product_name, 'product_price'=>$product_price]));
}

$sql = "SELECT order_no, product_id, product_name, product_price, product_qty, (product_price * product_qty) AS sub_total 
        FROM order_tbl
        WHERE order_no = '1001'";
Salin selepas log masuk

Dalam contoh ini, kami menggunakan Redis untuk caching Apabila menanyakan butiran pesanan, kami mula-mula mendapatkan nama produk dan harga daripada cache Jika mereka tidak wujud dalam cache, kami menanyakannya dari jadual produk dan tuliskannya ke bahagian tengah. Melalui kaedah ini, kami mengelakkan operasi JOIN dan meningkatkan kecekapan dan prestasi pertanyaan dengan banyak.

4. Ringkasan

Reka bentuk anti-paradigma mempunyai kebaikan dan keburukan, dan aplikasi yang munasabah adalah kuncinya. Apabila mereka bentuk pangkalan data, anda harus membuat pelbagai pertukaran berdasarkan situasi sebenar, menimbang kebaikan dan keburukan, dan menggunakan kaedah reka bentuk secara fleksibel. Dalam pengaturcaraan PHP, mengoptimumkan operasi pangkalan data melalui reka bentuk penyahnormalan juga merupakan teknologi yang sangat berguna dan praktikal. Kami boleh meningkatkan prestasi dan kecekapan pangkalan data, kelajuan tindak balas sistem dan kepuasan pengguna dengan menambah data berlebihan, pemprosesan teragih, caching dan strategi pengindeksan dan cara lain.

Atas ialah kandungan terperinci Reka bentuk denormalisasi pangkalan data: aplikasi dalam pengaturcaraan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan