【问题标题】:Mysql foreign keymysql外键
【发布时间】:2017-08-21 15:34:39
【问题描述】:

我想通过 IdProduct 在餐桌客户和餐桌产品之间建立链接。

例子:

Create table customer(
idcustomer  INT not null,
name        Varchar(20),
idproduct   INT,
);

create table Product(
idproduct INT not null,
nameProduct varchar(40)
);

我怎样才能像外键系统一样将两者联系在一起,当我选择一个客户时,我可以得到他所有的产品?这是关于数据库结构的问题。

【问题讨论】:

    标签: mysql database database-design


    【解决方案1】:

    您想引入第三张表来解决客户和产品之间的多对多关系。它应该由idcustomeridproduct 组成。

    然后,获取给定客户的所有产品:

    SELECT c.name, p.nameProduct
        FROM Customer c
            INNER JOIN CustomerProductXref cpx
                ON c.idcustomer = cpx.idcustomer
            INNER JOIN product p
                ON cpx.idproduct = p.idproduct
        WHERE c.idcustomer = 12345
    

    【讨论】:

    • 我知道,这只是一个纯粹的例子。我只是想加入表,当我选择一个客户时,我可以拿他的产品。
    【解决方案2】:

    在 mysql 中,外键是一种特殊类型的约束。它最好与表格一起创建,但也可以在之后添加。在这种情况下,您可以将约束定义为:

    ALTER TABLE 客户 添加外键(idproduct) 参考产品 (idproduct);

    (注意,你必须使用 InnoDB 引擎来利用 mysql 中的 FK。更多 here

    但是 FK 不需要进行 JOIN,这是您在 SELECT 中链接表的方式 -

    select c.idcustomer, c.name, p.nameproduct
    from customer c
    join Product p on p.idproduct=c.idproduct;
    

    【讨论】:

      【解决方案3】:

      以下是创建外键约束的方法(忽略 Joe 正确建议的基数问题):

      CREATE table Product(
          idproduct INT not null,
          nameProduct varchar(40),
          PRIMARY KEY (idproduct )
      );  
      
      CREATE table customer(
          idcustomer  INT not null,
          name        Varchar(20),
          idproduct   INT,
          FOREIGN KEY (idproduct) REFERENCES Product(idproduct )
      );
      

      像这样获取您的数据:

      SELECT * FROM Product AS P
      INNER JOIN Customer AS C ON C.idproduct = P.idproduct
      WHERE C.idcustomer = 1
      

      【讨论】:

      • 当我做一个选择时:从产品中选择 nameProduct,客户在哪里 idcustomer = 1 AND product.idproduct = customer.idproduct 它会工作吗??
      猜你喜欢
      • 1970-01-01
      • 2014-12-03
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多