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