承诺表正常化

时间:2014-08-18 15:01:58

标签: database relational-database

我有这张桌子而且我不知道如何正常化。

第一个表格名称,地址,固定电话号码,手机号码,电子邮件广告,金额和注册号码https://docs.google.com/file/d/0B99TeByt30n2dDVLVHV4dU1yRFE/edit

并在第二个表中将是他们的每月认捐。 https://docs.google.com/file/d/0B99TeByt30n2TVh4c1dmLTFYOWs/edit

2 个答案:

答案 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"或"第三范式"并获得不错的结果供您参考。 ;)

干杯。

编辑:让这个回复更容易理解。