Bardzo często stosowaną koncepcją w takiej sytuacji jest posiadanie tabeli użytkowników i tabeli postów, łącząc je ze sobą unikalnym identyfikatorem. Ten identyfikator może być dowolny — identyfikator serializowany, nazwa użytkownika, adres e-mail itp. — o ile jest unikalny. Łączenie odbywa się za pomocą ograniczenia klucza obcego. Nie wiem dokładnie, jak to się dzieje w MySQL, ale w Postgresie robi się to tak:
CREATE TABLE users (
id serial PRIMARY KEY,
name text
);
CREATE TABLE posts (
content text,
user_id integer REFERENCES users(id) NOT NULL
);
Tabele są następnie łączone za pomocą złączenia. Można to zrobić na kilka sposobów, ale tutaj jest sprzężenie krzyżowe po wstawieniu pewnych wartości do zabawy:
@> INSERT INTO users (name) VALUES ('James');
@> INSERT INTO users (name) VALUES ('Jones');
@> INSERT INTO posts (content, user_id) VALUES ('Hello from James.', 1);
@> INSERT INTO posts (content, user_id) VALUES ('Greetings from Jones.', 2);
@> SELECT U.id AS user_id, U.name, P.content \
FROM users U, posts P \
WHERE U.id = P.user_id;
user_id | name | content
---------+-------+-----------------------
1 | James | Hello from James.
2 | Jones | Greetings from Jones.
YMMV w MySQL, ale myślę, że powyższe konstrukcje będą działać od razu.
(edycja:Dodano WSTAWKI dla wyjaśnienia)