Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mencegah Pengundian Berbilang tanpa Menyimpan Array dalam MySQL?

Bagaimana untuk Mencegah Pengundian Berbilang tanpa Menyimpan Array dalam MySQL?

Barbara Streisand
Barbara Streisandasal
2024-10-30 11:32:26832semak imbas

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>

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>

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>

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!

Kenyataan:
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