MySQL数据库模式创建者&;所有者关系?例如,用户&;媒体
如果两个表之间存在创建者和所有者关系,那么将它们链接在一起的最佳方式是什么?例如,用户创建媒体文件条目。用户可以选择将图像/媒体文件作为配置文件图片。我已经用MySQL工作台构建了一个模式。但那样做是行不通的。其他表格:一个项目有一个或多个bug,一个bug有一个或多个注释。两个bug和注释都可以有一个或多个图像/媒体文件。谢谢MySQL数据库模式创建者&;所有者关系?例如,用户&;媒体,mysql,database,database-design,schema,mysql-workbench,Mysql,Database,Database Design,Schema,Mysql Workbench,如果两个表之间存在创建者和所有者关系,那么将它们链接在一起的最佳方式是什么?例如,用户创建媒体文件条目。用户可以选择将图像/媒体文件作为配置文件图片。我已经用MySQL工作台构建了一个模式。但那样做是行不通的。其他表格:一个项目有一个或多个bug,一个bug有一个或多个注释。两个bug和注释都可以有一个或多个图像/媒体文件。谢谢 首先: 根据您的解释,您的数据库设计应该如下(UML表示法): 用户创建媒体文件条目 所以你有一个创建者\用户\ id作为F.K进入媒体。它不能为null,每个媒体都
首先:
根据您的解释,您的数据库设计应该如下(UML表示法): 用户创建媒体文件条目 所以你有一个
创建者\用户\ id
作为F.K进入媒体
。它不能为null
,每个媒体都应该有一个创建者
用户可以选择将图像/媒体文件作为配置文件图片
所以用户和媒体之间有一对一的关系。您有两个选择:
profile\u user\u id
,并将其设置为Allow NULL
和Unique
profile\u media\u id
,并将其设置为Allow NULL
和Unique
李>
两者都是正确的
例如(第二个选项),您可以将配置文件\u media\u id
作为F.K导入用户
。它可以null
但是它应该是唯一的。意味着媒体
只能出现在一个用户配置文件中
这种设计(第二种选择)没有错。它看起来是一个循环引用。但是,当您使用配置文件映像添加新用户时(同时),您应该在一个事务中执行这些操作:
配置文件\u媒体\u id
设置为null
)creator\u user\u id创建媒体
profile\u media\u id
其次:
您的第二部分设计(媒体与帖子和bug之间的关系)看起来不错。(根据你的解释) 然而,我为他们设计了一个完整的外部媒体管理系统(见我的答案) 编辑 您可以使用以下方法创建表:
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);
看 可以在一个bug或一条评论中使用媒体吗?或者它也可以用于许多bug或注释?起初,没有计划使用媒体库。但在将来,我认为可以在bug和评论中重用媒体是有意义的。所以我在这里使用了n:m关系。但我不知道如何实现用户与媒体的关系。你好,Gholamali Irani,我在我的MariaDB(通过phpMyAdmin导入的Xampp)上尝试了这种方式。但是在这里,CREATETABLE语句发出了一个错误:无法创建表
dbname
user
(Fehler:150“外键约束格式不正确”)。在附近的数据字典中找不到引用的表dbname
media
。所以我不能创建这个模式,因为存在互惠关系。MySQL/MariaDB还有其他干净的方法吗?或者我必须使用n:m模式或删除creator用户日志字段吗?请参见添加的示例。