Hello TGM,
Basically there are many ways to model a database, and none of them can be declared as the best one generally. The optimal design for any database depends on the context in which it is to be used.
Nevertheless, some principles seem to be agreed upon more than others. Basically the best way to learn about good database design is to examine the design used in popular applications. More about this below.
Preliminary example
Before you lose your interest, let me present one common model:
Image

SQL
CREATE TABLE items (
item_id INTEGER NOT NULL,
name VARCHAR NOT NULL,
description VARCHAR NOT NULL,
CONSTRAINT items_pk PRIMARY KEY (item_id)
);
CREATE TABLE users (
user_id INTEGER NOT NULL,
name VARCHAR NOT NULL,
username VARCHAR NOT NULL,
password VARCHAR NOT NULL,
email VARCHAR NOT NULL,
CONSTRAINT users_pk PRIMARY KEY (user_id)
);
CREATE TABLE ratings (
item_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
rating_id INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
CONSTRAINT ratings_pk PRIMARY KEY (item_id, user_id)
);
ALTER TABLE ratings ADD CONSTRAINT items_ratings_fk
FOREIGN KEY (item_id)
REFERENCES items (item_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;
ALTER TABLE ratings ADD CONSTRAINT users_ratings_fk
FOREIGN KEY (user_id)
REFERENCES users (user_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;
Remark
In this model I have used three tables. The important element is that in the ratings table, the two foreign keys are the primary keys of the table, as it is this pair of keys that ensures that a user can only rate an item once. You can of course add the ratings_id to the set of primary keys, although it will not have much effect upon the table constraint you mention in your question.
Enough about my design. Let’s look at what you really should do.
A better solution
Instead of relying blindly on others opinions, you should invest some time and find out for yourself which database designs are commonly used in rating systems.
Here is what you should do:
Install a Database Modelling Tool. Personally I prefer SQL Power Architect, which is an open source solution that enables you to reverse engineer and forward engineer database models to/from the most commonly used databases. The tool is also perfect for playing around with database models. The schema in the example above is made using SQL Power Architect.
If you prefer other solutions, you can find a long list of alternative tools at databaseanswers.
If you haven’t got one already, install a server development package such as XAMPP or LAMP. Personally I prefer to use NginX and setting up database engines and programming languages myself.
Search the web for open source rating software, and install these on your development server. If you are too lazy to do that, take a look at these alternatives: Rating System, Open Rating, or PHP Stars.
Connect SQL Power Architect to the different databases, and use reverse engineer to examine and compare the different solutions.
If you follow these steps, you will soon get some ideas about how to setup/model a database for your own rating application.
Best of luck with your project.