首页 > 解决方案 > 确定表结构

问题描述

我想为动漫创建数据库。这是我的 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)
);

标签: sqlentity-relationship

解决方案


这里有几个问题:

  • 为什么一切都是类型INT?我会假设这name可能是一个nvarchar最大长度nvarchar(200)
  • 您的TagOfAnime表有两列名为id。那不管用。tag如果它们是对and表的主键的引用Anime,那么您应该这样命名它们:Tag_idAnime_id
  • 我不会命名一个表Link。什么是“链接”?我会让它更具描述性。
  • 一般来说,如果在另一个表中可以有多个项目与单行相关联,则添加一个表 - 就像您对动漫的标签所做的那样。否则,如果数据可以出现在基表单行的附加列中,则合并表以避免复杂性。除此之外,请询问您遇到的具体问题,我相信有人会提供帮助。

推荐阅读