【问题标题】:How to ER Diagram MYSQL如何ER图MYSQL
【发布时间】:2020-09-10 18:53:24
【问题描述】:

我正在尝试在 mysql 中创建简单的库数据库。我有 5 桌学生,条目,书籍,打字本,作者。当我尝试使用 mysql 逆向工程制作 er 图时,我的表在 er 图上没有任何关系。但是几乎每个数据库都在互联网上的er图上有关系。我做错了什么以及如何解决?

CREATE TABLE student(
`stuNo` INT NOT NULL,
`stuname` VARCHAR(45) NULL,
`stusurname` VARCHAR(45) NULL,
`class` INT NULL,
`age` INT NULL,
PRIMARY KEY (`stuNo`));

 CREATE TABLE entry(
`stuNo` INT NOT NULL,
`entryno` INT NOT NULL,
`bookno` INT NOT NULL,
`borrowdate` DATE NULL,
`returndate` DATE NULL,
PRIMARY KEY (`bookno`));

 CREATE TABLE book(
`bookno` INT NOT NULL,
`bookname` VARCHAR(45) NULL,
 `authorno` INT NOT NULL,
`typeno` INT NOT NULL,
PRIMARY KEY (authorno , typeno));

 CREATE TABLE  typebook (
`typeno` INT NOT NULL,
`typename` VARCHAR(45) NULL,
PRIMARY KEY (`typeno`));

 CREATE TABLE author(
`authorno` INT NOT NULL,
`authorname` VARCHAR(45) NULL,
`autorname` VARCHAR(45) NULL,
PRIMARY KEY (`authorno`));

【问题讨论】:

    标签: mysql entity-relationship er-diagrams


    【解决方案1】:

    我不得不切换 CREATE TABLE 的顺序

    改变的是您必须插入数据的顺序。 例如

    如果你想插入一本书,你首先必须插入与书相对应的打字本和作者等等。

    CREATE TABLE student(
    `stuNo` INT NOT NULL,
    `stuname` VARCHAR(45) NULL,
    `stusurname` VARCHAR(45) NULL,
    `class` INT NULL,
    `age` INT NULL,
    PRIMARY KEY (`stuNo`));
    
     CREATE TABLE  typebook (
    `typeno` INT NOT NULL,
    `typename` VARCHAR(45) NULL,
    PRIMARY KEY (`typeno`));
    
     CREATE TABLE author(
    `authorno` INT NOT NULL,
    `authorname` VARCHAR(45) NULL,
    `autorname` VARCHAR(45) NULL,
    PRIMARY KEY (`authorno`));
    
    CREATE TABLE book(
    `bookno` INT NOT NULL,
    `bookname` VARCHAR(45) NULL,
     `authorno` INT NOT NULL,
    `typeno` INT NOT NULL,
    PRIMARY KEY (authorno , typeno),
    INDEX(bookno),
    FOREIGN KEY (typeno)
            REFERENCES typebook(typeno),
    FOREIGN KEY (authorno)
            REFERENCES author(authorno));
    
     CREATE TABLE entry(
    `stuNo` INT NOT NULL,
    `entryno` INT NOT NULL,
    `bookno` INT NOT NULL,
    `borrowdate` DATE NULL,
    `returndate` DATE NULL,
    PRIMARY KEY (`bookno`),
    FOREIGN KEY (stuNo)
            REFERENCES student(stuNo),
    FOREIGN KEY (bookno)
            REFERENCES book(bookno)
            );
    

    结果

    【讨论】:

    • 我是个初学者。对此感到抱歉。我确实理解为什么我们改变表格的顺序。而且我想我可以在图表管理器上使用我自己的关系,而无需使用外键之类的代码。我还有一个问题在代码 authorno 中,表 book 上的 typeno 和 entry 表上的 bookno 是主键。但是它们看起来不像图表上的主键。我不明白为什么?
    • 你的结构有点不对劲,主键应该在书 booid 和 authorno 中,typeno 应该是一个独立的或唯一的约束,总线随着你进一步开发软件将会有 soe mot 索引和另一种结构,我只建立一个合理的结构而不会改变太多
    • 我见过,但是,mysql 有外键概念作为关系,您可以定义两个表如何链接,您还可以定义更新条目时要做什么(例如name 是外键,当它更新时,您还希望每个链接表都显示新名称。因此,如果您希望表之间的行 ion mysql 您必须定义外键,在您的情况下,这些列具有相同的名称(顺便说一句,这也不是上帝的想法)
    【解决方案2】:

    问题是您的表没有任何FOREIGN KEYS 集。 MySQL 不知道一个表中的authorno 列应该链接到另一个表中的authorno 列。因此不会生成任何关系链接。

    要生成到您的 ER 图的关系链接,您必须在 CREATE TABLE 查询中使用 FOREIGN KEY 条目来指定一个表中的哪一列正在引用另一个表中的一列:

    CREATE TABLE author(
        `authorno` INT NOT NULL,
        `authorname` VARCHAR(45) NULL,
        `autorname` VARCHAR(45) NULL,
        PRIMARY KEY (`authorno`)
    );
    
    CREATE TABLE book(
        `bookno` INT NOT NULL,
        `bookname` VARCHAR(45) NULL,
        `authorno` INT NOT NULL,
        `typeno` INT NOT NULL,
        PRIMARY KEY (bookno),
        FOREIGN KEY (authorno) REFERENCES author(authorno)
    );
    

    通过添加FOREIGN KEY 条目,MySQL 现在知道book 中的authorno 列必须引用来自author 表的authorno 列的值。生成 ER 图时,您应该获取表之间的线以查看关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 2010-09-22
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      相关资源
      最近更新 更多