我有这张桌子而且我不知道如何正常化。
第一个表格名称,地址,固定电话号码,手机号码,电子邮件广告,金额和注册号码https://docs.google.com/file/d/0B99TeByt30n2dDVLVHV4dU1yRFE/edit
并在第二个表中将是他们的每月认捐。 https://docs.google.com/file/d/0B99TeByt30n2TVh4c1dmLTFYOWs/edit
答案 0 :(得分:0)
PersonTable
PersonId int primary key
Name varchar(50)
Addresss varchar(50)
etc.
PledgeTable
PledgeId int primary key,
PersonId int foreign key references PersonTable(PersonId)
PledgeDate datetime
PledgeAmount decimal(10,2)
答案 1 :(得分:0)
确定。 你必须重新设计整个想法。
我会给你一些概念来理解该怎么做。
请记住,我们不得重复数据。
因此,数组可以命名为Customer。 客户可以拥有一个客户ID列,例如名为c_id。 c_id必须定义为整数UNIQUE Auto_Increment NOT NULL
这意味着它是一个赋予每个客户独特性的属性。
客户可能与其他客户具有相同的姓名和姓氏,但从不与c_id相同。
自动增量意味着第一个条目将自动编号为c_id = 1,下一个2等等。
请记住,如果使用PHP在数据库中传递记录,则输入null作为c_id的值。然后,Auto Incremet完成这项工作。
因此,您获得了一个客户表及其第一个属性,该属性将被定义为主键。
例如,这是一个小表:
CREATE TABLE客户
(c_id整数UNIQUE Auto_Increment NOT NULL,
c_name varchar(100),
c_surname varchar(100),
c_address varchar(100),
PRIMARY KEY(c_id)
);
您必须添加客户在表格中的所有属性。 这只是一个例子。
PRIMARY KEY(c_id)行到底, 将c_id设置为将每个记录区分为唯一的主键。
然后你有另一张桌子。 承诺表。
创建表承诺
(pl_id整数UNIQUE Auto_Increment NOT NULL,
pl_date date,
pl_price double(9,2),
pl_c_id整数,
PRIMARY KEY(pl_id),
FOREIGN KEY(pl_c_id)REFERENCES customer(c_id));
这里有什么新鲜事?
行: pl_c_id整数,
和行: FOREIGN KEY(pl_c_id)REFERENCES customer(c_id)
这里发生的是你创建一个包含现有c_id的列! 这样,您可以使用他/她的UNIQUE c_id来引用客户。
这被定义为整数,因此它可以适合键。 pl_c_id必须与另一个表的主键类型相同。 OK?
通过阅读以下行,SQL将知道我们引用的键:
FOREIGN KEY(pl_c_id)REFERENCES customer(c_id)
用简单的英语表示:
pl_c_id可以填充已在另一个表的主键中声明的值,名为" customer"使用名为" c_id"。
的列作为主键知道了吗?
现在您可以灵活地使用任何日期。
这比你得到的更为规范。 通常是3NF(第三范式),你可以。
哦!更不用说你可以谷歌" 3NF"或"第三范式"并获得不错的结果供您参考。 ;)
干杯。
编辑:让这个回复更容易理解。