如何正确绑定MySQL表

时间:2014-04-18 14:26:54

标签: mysql

我在Stackoverflow上浏览了类似的主题,但还没有找到我正在寻找的解决方案。请告诉我如何组织表关系。我有2个表:一个包含承包商的名称和每个承包商的合同数量,第二个表包含与每个承包商相关的发票数据(如数量,金额,日期)。我该如何正确连接这两个表?我有一个想法存储在第一个表中的承包商的ID,承包商的名称和编号;在第二个承包商的ID和所有调用'细节。但是我应该存储所有发票吗?数据在一个表格中,或为每个承包商创建单独的表格(包含发票的数据)?我是db-issues的新手,并且没有足够的经验。我将不胜感激任何建议。

3 个答案:

答案 0 :(得分:2)

你正确地做了。最好有两个表,因为数据的冗余会更少,从而可以更有效地利用空间。

举个例子:

CONTRACTOR TABLE
ID        NAME        PHONE
----------------------------------
1         TEST1       619-123-4567
2         TEST2       619-234-5678

INVOICE TABLE
ID        CONTRACTOR_ID        AMOUNT        DATE
----------------------------------------------------------------
1         1                    150.00        2014-04-17 00:00:00
2         1                    150.00        2014-04-18 00:00:00

所以在示例表中,我有两个承包商。第一个名为TEST1,在INVOICE表中有两个发票链接。

如果您担心性能,我建议的是在两个表和外键上添加索引,将承包商信息与承包商ID的发票相关联。

答案 1 :(得分:1)

这两个表应该是正确的

Contractor 
NumberOfContact NameOfContact 

Invoice Data 
Number Amount Date

发票表的号码将是承包商号码的FK,如果该人员在发票表中有多个条目,则将按日期标识

答案 2 :(得分:1)

你的思路是正确的。脚本将是这样的:

CREATE TABLE `contractor` (
      `id` INT NOT NULL,
      `name` VARCHAR(45) NOT NULL,
      PRIMARY KEY (`id`));

CREATE TABLE .`invoice` (
  `number` INT NOT NULL,
  `amout` INT NOT NULL,
  `date` DATE NOT NULL,
  `id_contractor` INT NOT NULL,
  PRIMARY KEY (`number`),
  INDEX `fk_invoice_1_idx` (`id_contractor` ASC),
  CONSTRAINT `fk_invoice_1`
    FOREIGN KEY (`id_contractor`)
    REFERENCES `contractor` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);