Storing Arrays in MySQL: An Alternative Approach to Prevent Multiple Voting
MySQL natively does not support the storage of arrays within fields. However, a relational database design can be employed to achieve a similar result.
Database Design
Consider the following database schema:
<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>
The comments_votes table uses a composite primary key to ensure that each user can only vote once on a given comment.
Example 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>
Benefits
This approach has several advantages:
Foreign Key Constraints (Optional)
Additionally, foreign key constraints can be added to enforce referential integrity between the tables:
<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>
By utilizing this relational database design, you can effectively prevent multiple voting and maintain data integrity without the need for storing arrays in MySQL.
The above is the detailed content of How to Prevent Multiple Voting without Storing Arrays in MySQL?. For more information, please follow other related articles on the PHP Chinese website!