是否有必要在foriegn表中有一个主键?

时间:2016-10-08 16:58:13

标签: mysql sql

            Table one
                ID | product_code | product name | company_id 
                1  |  12345       | beer cake    |343434defee
                2  |  12346       | vodka cake   |343434deereee

            Table two
                   Product_code |Quantity | price | weight 
                   12345        |  34     |345    |0.5 
                   12345        |  343    |600    |1.0 
                   12345        |  4      |845    |1.5 
                   12346        |  341    |345    |0.5 


         CREATE TABLE `one`(
         ID INT  NOT NULL AUTO_INCREMENT PRIMARY KEY,
         product_code VARCHAR(32) NOT NULL ,
         name VARCHAR(30) NOT NULL ,
         company_id VARCHAR(30) NOT NULL)

         CREATE TABLE two(
         product_code VARCHAR(32) ,
         weight VARCHAR(20) NOT NULL ,
         price  INT(4) NOT NULL , 
         Quantity INT(4) NOT NULL ,
         FOREIGN KEY (product_code) REFERENCES one(product_code))

这就是我的表格,每种类型的蛋糕都必须显示在产品登录页面上。两个表格之间的关系由product_code列给出。

是否需要在外表中使用主键?

请告诉我这些适当的架构创建?

2 个答案:

答案 0 :(得分:1)

您的数据结构设置错误。这是你的第一张表:

ID | product_code | product name | company_id 
1  |  12345       | beer cake    |343434defee
2  |  12346       | vodka cake   |343434deereee

这很好。 ID - 大概是 - 每行的唯一ID。它应该被声明为主键。 product_code应声明为unique

第二个表应包含id,而不是product_codeProduct_code是第一个表的每一行的属性。您有id来引用该行。

答案 1 :(得分:1)

如果您的FK指向具有唯一约束的列,则可以检查here以获取详细信息。

在此之前,您应该澄清您的设计:

1)为您的表提供有意义的名称。例如。表1 - <svg class="svg__container" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"> <circle class="svg__circle" cx="50%" cy="50%" r="25%" fill="currentColor" /> </svg>,表2 - Product

2)为表ProductTransaction创建主键:对于大多数使用场景,ProductTransactionId列应该没问题

3)在ProductTransactionProductTransaction表之间创建外键。虽然您可以使用Product列,但我建议您将定义标准化:

a)从ProductTransaction中删除product_code b)添加product_code并定义指向ProductId

的外键

这样,您将存储更少的数据(只是一些整数而不是字符串),并且表之间的连接会更快。