Question: I am making a webapp right now and I am trying to get my head around the database design.

I have a user model(username (which is primary key), password, email, website)
I have a entry model(id, title, content, comments, commentCount)

A user can only comment on an entry once. What is the best and most efficient way to go about doing this?

At the moment, I am thinking of another table that has username (from user model) and entry id (from entry model)

```
   **username    id**
    Sonic        4
    Sonic        5
    Knuckles     2
    Sonic        6
    Amy          15
    Sonic        20
    Knuckles     5
    Amy          4

```

So then to list comments for entry 4 it searches for id=4.

**On a side note:**
Instead of storing a commentCount, would it be better to calculate the comment count from the database each time when needed?

Answer: 
What exactly do you mean by

```
entry model(id, title, content, **comments**, commentCount)

```

(emphasis mine)? Since it looks like you have multiple comments per entity, they should be stored in a separate table:

```
comments(id, entry_id, content, user_id)

```

`entry_id` and `user_id` are foreign keys to respective tables. Now you just need to create a unique index on (`entry_id`, `user_id`) to ensure user can only add one comment per entity.

Also, you may want to create a surrogate (numeric, generated via sequence / identity) primary key for your users table instead of making user name your PK.
It sounds like you want to guarantee that the set of comments is unique *with respect to* `username` X `post_id`. You can do this by using a unique constraint, or if your database system doesn't support that explicitly, with an index that does the same. Here's some SQL expressing that:

```
CREATE TABLE users (
    username VARCHAR(10) PRIMARY KEY,
    -- any other data ...
);

CREATE TABLE posts (
    post_id INTEGER PRIMARY KEY,
    -- any other data ...
);

CREATE TABLE comments (
    username VARCHAR(10) REFERENCES users(username),
    post_id INTEGER REFERENCES posts(post_id),
    -- any other data ...
    UNIQUE (username, post_id) -- Here's the important bit!
);

```