【问题标题】:MySQL architectureMySQL 架构
【发布时间】:2020-08-05 06:32:24
【问题描述】:

我是创建关系数据库架构的新手。我正在创建一个非常基本的数据表,其中有两个数据表。

CREATLE TABLE Authors (
idAuthors INT NOT NULL auto_increment,
Name VARCHAR(50) NOT NULL,
Birthplace VARCHAR(50) NOT NULL,
PRIMARY KEY (idAuthors));


CREATLE TABLE Shops(
idShops NOT NULL auto_increment,
Name_shop VARCHAR(50) NOT NULL,
Name_authors VARCHAR(50) NOT NULL,
Location VARCHAR(50) NOT NULL
PRIMARY KEY (idShops));

我的问题是您是否应该在每个表或中间表中都有一个外键:

CREATLE TABLE intermediate(
PRIMARY KEY (idShops),
PRIMARY KEY (idAuthors));

这对吗?

谢谢!

【问题讨论】:

  • 它只取决于你想要什么。如果是多对多关系,则无法通过其他方式完成。
  • 这是正确的吗? 不可以。该表不能有 2 个 PK,也不能没有列。
  • 我在 authors 表中的每一行都有一个不同的作者,但在 stores 表中一个作者可能出现多次。 @ÁlvaroGonzález
  • 中间表应该怎么做? @Akina
  • 您没有为您的设计/代码提供满足/模型/实现/记录的规范,因此我们不知道您“应该”拥有什么。请通过编辑而不是 cmets 进行澄清。 PS 是时候关注已出版的关于信息建模、关系模型和数据库设计与查询的学术教科书了。 (用于记录和使用设计的语言和工具的手册不是这样的教科书。)(维基文章或网络帖子也不是。)问一个特定的问题。

标签: mysql database-design foreign-keys


【解决方案1】:

类似

CREATE TABLE Authors (
    idAuthors INT NOT NULL auto_increment,
    NameAuthor VARCHAR(50) NOT NULL DEFAULT 'unknown',
    BirthPlace VARCHAR(50) NOT NULL DEFAULT 'not defined',
    PRIMARY KEY (idAuthors) 
);
CREATE TABLE Shops(
    idShops INT NOT NULL auto_increment,
    NameShop VARCHAR(50) NOT NULL 'unspecified',
    Location VARCHAR(50) NOT NULL 'not specified',
    PRIMARY KEY (idShops) 
);
CREATE TABLE Authors_Shops (
    idAuthors INT NOT NULL,
    idShops INT NOT NULL,
    PRIMARY KEY (idAuthors, idShops),
    CONSTRAINT fk_Authors FOREIGN KEY (idAuthors) REFERENCES Authors (idAuthors),
    CONSTRAINT fk_Shops FOREIGN KEY (idShops) REFERENCES Shops (idShops) 
);

【讨论】:

    猜你喜欢
    • 2011-11-28
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多