Alo pessoal blz?
Eu estou a desenvolver um trabalho de fim do curso quera sobre denselvovimento de um FORUM no entanto estou com algumas dificuldades sobre Chaves estrangeira.
Quando um usuario quer criar um novo topico, tem que inserir o Assunto e o Corpo da Mensagem como no GUJ por exemplo, entao eu criei duas tabelas direi aqui que sao Assunto e Mensagem.
A tabela assunto e onde vai armazenar os assunto do forum com um assunto_id e a tabela Mensagem e onde vai armazenar as mensagens do assunto com id_mensagem e assunto_id como chave estrangeira para identificar que certas mensagens pertecem a um determinado assunto.
Eu gostaria que quando o utilizador estiver a criar um novo topico, logo que enviar o topico, o sistema gravar o Assunto na tabela do assunto e a mensagem na tabela mensagem com o id do assunto.
Andei pesquisando uns exemplo na google e encontrei isso:
[/code]CREATE TABLE person (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
name CHAR(60) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE shirt (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
style ENUM('t-shirt', 'polo', 'dress') NOT NULL,
colour ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,
owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),
PRIMARY KEY (id)
);
INSERT INTO person VALUES (NULL, 'Antonio Paz');
INSERT INTO shirt VALUES
(NULL, 'polo', 'blue', LAST_INSERT_ID()),
(NULL, 'dress', 'white', LAST_INSERT_ID()),
(NULL, 't-shirt', 'blue', LAST_INSERT_ID());
INSERT INTO person VALUES (NULL, 'Lilliana Angelovska');
INSERT INTO shirt VALUES
(NULL, 'dress', 'orange', LAST_INSERT_ID()),
(NULL, 'polo', 'red', LAST_INSERT_ID()),
(NULL, 'dress', 'blue', LAST_INSERT_ID()),
(NULL, 't-shirt', 'white', LAST_INSERT_ID());
SELECT * FROM person;
+----+---------------------+
| id | name |
+----+---------------------+
| 1 | Antonio Paz |
| 2 | Lilliana Angelovska |
+----+---------------------+
SELECT * FROM shirt;
+----+---------+--------+-------+
| id | style | colour | owner |
+----+---------+--------+-------+
| 1 | polo | blue | 1 |
| 2 | dress | white | 1 |
| 3 | t-shirt | blue | 1 |
| 4 | dress | orange | 2 |
| 5 | polo | red | 2 |
| 6 | dress | blue | 2 |
| 7 | t-shirt | white | 2 |
+----+---------+--------+-------+
SELECT s.* FROM person p, shirt s
WHERE p.name LIKE 'Lilliana%'
AND s.owner = p.id
AND s.colour <> 'white';
+----+-------+--------+-------+
| id | style | colour | owner |
+----+-------+--------+-------+
| 4 | dress | orange | 2 |
| 5 | polo | red | 2 |
| 6 | dress | blue | 2 |
+----+-------+--------+-------+[code]
Para o meu sistem o exemplo acima nao server porque esta usar o last_insert_id(). Uma vez que serao varios usuarios a aceder o banco de dados pode haver concorrencia ou seja dar o caso que o last_insert_id() nao pertencer ao usuario que enviou a duvida.
Ajudem!!!
valeu