Relacionamento com o criador e dono da base de dados MySQL? Por exemplo, o utilizador & multimédia?
Qual é a melhor maneira de unir duas tabelas se há uma relação de criador e dono entre elas? Por exemplo, um usuário cria um arquivo de mídia. Um usuário opcionalmente tem um arquivo de imagem / mídia como uma imagem de perfil. Construí um esquema com a bancada de trabalho MySQL. Mas assim não funciona. As outras tabelas: um projeto tem um ou muitos bugs, Um bug tem um ou muitos comentários. Ambos os bugs um comentário pode ter um ou muitos arquivos de imagens / mídia. Obrigado!
1 answers
Primeiro::
Com base na sua explicação, o seu desenho de Base de Dados deverá ser assim (notação UML):
Um utilizador cria um ficheiro multimédia.
Então você tem um creator_user_id
Como F. K em media
. Ele não pode ser null
e cada mídia deve ter um criador.
Então tens uma relação de um para um. entre Usuário e mídia. Tem duas opções:Um utilizador opcionalmente tem um ficheiro imagem / media como uma imagem de perfil.
- mover o id do utilizador como F. K para os media como
profile_user_id
e torná-loAllow NULL
eUnique
. - mover o ID do disco como F. K para o utilizador como
profile_media_id
e torná-loAllow NULL
eUnique
.
Por exemplo (segunda opção), você pode ter um profile_media_id
Como F. K em user
. Pode ser . mas deve ser unique
. Significa que um media
só pode aparecer num perfil de utilizador.
Este desenho (segundo opção) não está errado. Parece uma referência circular. Mas, quando você está adicionando um novo usuário com uma imagem de perfil( ao mesmo tempo), você deve realizar estas ações em uma transação :
- crie um utilizador (e deixe o
profile_media_id
Sernull
) - criar um meio com um novo
creator_user_id
- actualizar o novo utilizador
profile_media_id
em Segundo lugar,:
Sua segunda parte do design (relacionamentos entre mídia e post e bug) parece bem. (com base nas suas explicações)
Editar
Você pode usar algo como abaixo para criar suas tabelas:
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS myuser;
SET FOREIGN_KEY_CHECKS=1;
CREATE TABLE myuser(
user_id INT NOT NULL,
profile_media_id INT DEFAULT NULL,
PRIMARY KEY (user_id)
);
DROP TABLE IF EXISTS mymedia;
CREATE TABLE mymedia(
media_id INT NOT NULL,
creator_user_id INT NOT NULL,
PRIMARY KEY (media_id),
FOREIGN KEY (creator_user_id) REFERENCES myuser (user_id),
UNIQUE (creator_user_id)
);
ALTER TABLE myuser ADD CONSTRAINT myusermymediafk FOREIGN KEY (profile_media_id) REFERENCES mymedia (media_id);