如果两个表之间存在创建者和所有者关系,那么将两个表链接在一起的最佳方法是什么?例如,用户创建媒体文件条目。用户可选地具有图像/媒体文件作为简档图片。我用MySQL Workbench构建了一个模式。但这样做并不起作用。其他表:项目有一个或多个错误,错误有一个或多个注释。两个错误的注释都可以有一个或多个图像/媒体文件。谢谢!
答案 0 :(得分:1)
<强>首先强>:
根据您的解释,您的数据库设计应该是这样的(UML表示法):
用户创建媒体文件条目。
所以你有creator_user_id
作为F.K进入media
。 不能为null
,每个媒体都应该有一个创作者。
用户可选将图片/媒体文件作为个人资料图片。
因此,您在用户和媒体之间建立了一对一的关系。您有两种选择:
profile_user_id
并将其设为Allow NULL
和Unique
。profile_media_id
并将其设为Allow NULL
和Unique
。 两者都是正确的。
例如(第二个选项),您可以将profile_media_id
作为F.K加入user
。 可以成为null
。 但应为unique
。表示media
只能出现在一个用户个人资料中。
这种设计(第二种选择)没错。它看起来是循环引用。但是,当您添加具有个人资料图片的新用户(同时)时,您应该在一个交易中执行这些操作:
profile_media_id
成为null
)creator_user_id
profile_media_id
其次:
你设计的第二部分(媒体与帖子和bug之间的关系)看起来很不错。 (根据你的解释)
但是,我为他们设计了一个完整的外部媒体管理系统(参见我的回答here)。
您可以使用以下内容创建表格:
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);