Bagaimana untuk Mencegah Pengundian Berbilang tanpa Menyimpan Array dalam MySQL?

Barbara Streisand
Lepaskan: 2024-10-30 11:32:26
asal
830 orang telah melayarinya

How to Prevent Multiple Voting without Storing Arrays in MySQL?

Menyimpan Tatasusunan dalam MySQL: Pendekatan Alternatif untuk Mencegah Pengundian Berbilang

MySQL secara asalnya tidak menyokong penyimpanan tatasusunan dalam medan. Walau bagaimanapun, reka bentuk pangkalan data hubungan boleh digunakan untuk mencapai hasil yang serupa.

Reka Bentuk Pangkalan Data

Pertimbangkan skema pangkalan data berikut:

<code class="sql">CREATE TABLE comments (
    comment_id INT PRIMARY KEY,
    body VARCHAR(100)
);

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(20)
);

CREATE TABLE comments_votes (
    comment_id INT,
    user_id INT,
    vote_type INT,
    PRIMARY KEY (comment_id, user_id)
);</code>
Salin selepas log masuk

Jadual comments_votes menggunakan kunci utama komposit untuk memastikan setiap pengguna hanya boleh mengundi sekali pada ulasan yang diberikan.

Contoh Data

<code class="sql">-- Insert sample data
INSERT INTO comments VALUES (1, 'First comment');
INSERT INTO comments VALUES (2, 'Second comment');
INSERT INTO comments VALUES (3, 'Third comment');

INSERT INTO users VALUES (1, 'user_a');
INSERT INTO users VALUES (2, 'user_b');
INSERT INTO users VALUES (3, 'user_c');

-- Record user 1's votes
INSERT INTO comments_votes VALUES (1, 1, 1);
INSERT INTO comments_votes VALUES (2, 1, 1);</code>
Salin selepas log masuk

Faedah

Pendekatan ini mempunyai beberapa kelebihan:

  • Menghalang undian berganda: Kekangan utama utama pada jadual comments_votes menguatkuasakan integriti rujukan dan memastikan ketekalan data.
  • Jenis undian fleksibel: Lajur vote_type membenarkan jenis undian yang berbeza, seperti suka atau tidak suka.
  • Mudah ditanya: Model hubungan membolehkan pertanyaan yang cekap untuk maklumat pengundi dan kiraan undi.

Kekangan Utama Asing (Pilihan)

Selain itu, kekangan kunci asing boleh ditambah untuk menguatkuasakan integriti rujukan antara jadual:

<code class="sql">CREATE TABLE comments (
    ...
) ENGINE=INNODB;

CREATE TABLE users (
    ...
) ENGINE=INNODB;

CREATE TABLE comments_votes (
    ...
    FOREIGN KEY (comment_id) REFERENCES comments (comment_id),
    FOREIGN KEY (user_id) REFERENCES users (user_id)
) ENGINE=INNODB;</code>
Salin selepas log masuk

Dengan menggunakan reka bentuk pangkalan data hubungan ini, anda boleh menghalang pengundian berbilang dan mengekalkan integriti data dengan berkesan tanpa perlu menyimpan tatasusunan dalam MySQL.

Atas ialah kandungan terperinci Bagaimana untuk Mencegah Pengundian Berbilang tanpa Menyimpan Array dalam MySQL?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!