sql - 确定表结构
问题描述
我想为动漫创建数据库。这是我的 ER 结构: https ://ibb.co/ctRk8f6
有什么建议可以改善这一点吗?
每个动漫都有图像和与品牌和剧集的关系的blob,每个剧集可能有多个链接和与标签的关系。
我想知道这种结构是否良好,或者我应该为图像或任何其他提示制作单独的表格
CREATE TABLE Brand
(
id INT NOT NULL,
name INT NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE Tag
(
id INT NOT NULL,
name INT NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE Anime
(
id INT NOT NULL,
name INT NOT NULL,
img INT NOT NULL,
id INT,
PRIMARY KEY (id),
FOREIGN KEY (id) REFERENCES Brand(id)
);
CREATE TABLE Episode
(
order INT NOT NULL,
rating INT NOT NULL,
date INT NOT NULL,
id INT NOT NULL,
PRIMARY KEY (order, id),
FOREIGN KEY (id) REFERENCES Anime(id)
);
CREATE TABLE Link
(
link INT NOT NULL,
host INT NOT NULL,
order INT NOT NULL,
id INT NOT NULL,
PRIMARY KEY (link, order, id),
FOREIGN KEY (order, id) REFERENCES Episode(order, id)
);
CREATE TABLE TagOfAnime
(
id INT NOT NULL,
id INT NOT NULL,
PRIMARY KEY (id, id),
FOREIGN KEY (id) REFERENCES Anime(id),
FOREIGN KEY (id) REFERENCES Tag(id)
);
解决方案
这里有几个问题:
- 为什么一切都是类型
INT
?我会假设这name
可能是一个nvarchar
最大长度nvarchar(200)
? - 您的
TagOfAnime
表有两列名为id
。那不管用。tag
如果它们是对and表的主键的引用Anime
,那么您应该这样命名它们:Tag_id
和Anime_id
- 我不会命名一个表
Link
。什么是“链接”?我会让它更具描述性。 - 一般来说,如果在另一个表中可以有多个项目与单行相关联,则添加一个表 - 就像您对动漫的标签所做的那样。否则,如果数据可以出现在基表单行的附加列中,则合并表以避免复杂性。除此之外,请询问您遇到的具体问题,我相信有人会提供帮助。
推荐阅读
- selenium - 探索向希望自行运行测试的非技术业务团队提供 Selenium 测试的选项
- git - 致命:无法访问“https://xxxx.git/”:服务器证书验证失败。CAfile:/etc/ssl/certs/ca-certificates.crt CRLfile:无
- python - 为什么 siunitx LaTeX 包会为 matplotlib 图形中的某些文本元素添加垂直偏移量?
- java - 通过 C# 和 Java 之间的 protobuf-net 进行序列化/解封
- firebase - Firebase如何检查路径包含值并允许读写其他路径
- javascript - 无效的 VNode 类型:未定义(未定义) - 与
- google-api - updateMask 可能仅包含“draftGrade”或“assignedGrade”在通过 Google 课堂 API 修补学生提交时出现 400 错误
- sql - 基于多个时间戳的 Oracle SUM 值
- laravel-backpack - 在背包中使用 softDelete 并在操作中停用
- javascript - 变量在局部函数中没有改变