我正在尝试使用VB.Net和MySQL为其数据库创建一个简单的注册程序。这是我用于基本信息的简单表格
但是,我试图提高我对表格规范化的基本知识,这就是为什么我将日期字段分开以避免,比如说在一天内重复插入同一日期。我的意思是,当50个人在一天内注册时,它只会在tblRegDate表中添加一个日期(记录),而不是在表中添加50次。有没有办法做到这一点?在VB.Net和MySQL中有可能吗?或者更确切地说,我应该添加或修改某些字段吗?或者我应该在VB.Net中提出一个条件?上面的表格是我朋友教给我的,但我发现它并没有消除冗余。请给我任何指导或指导我到网站,其中有一个简单的教程。提前谢谢!
这是我的MySQL代码:
CREATE TABLE tblInfo(
Number INT AUTO_INCREMENT,
LastName VARCHAR(45),
FirstName VARCHAR(45),
MiddleName VARCHAR(45),
Gender ENUM(M,F),
BirthDate DATE,
PRIMARY KEY(Number));
CREATE TABLE tblRegDate(
IDRegDate INT AUTO_INCREMENT,
Date TIMESTAMP,
Number INT,
PRIMARY KEY(IDRegDate),
FOREIGN KEY(Number) REFERENCES tblInfo(Number));
答案 0 :(得分:2)
正如我在这种情况下所看到的那样,你没有分离单个领域的优势。你会失去很多表现。
表规范化与没有任何冗余值无关。它更多的是“分离关注点”
同样重要的是不要在数据库中出现爆炸性复杂性。分离单个填充将最终存储在数据库中,没有人能够理解。
问题是:注册有更多信息吗?对于示例网页,IP,.....
你应该有两个表,例如“人”和“注册”。那么你将有两个语义不同的东西,不应该混淆。
您可以通过Google找到很多示例和信息。和维基百科 http://en.wikipedia.org/wiki/Database_normalization
答案 1 :(得分:1)
实际上,从表中分离时间戳并不是一个好主意。
你需要另一张表,即timeTable。它将有两列id和timestmap,您应该在tblRegDate表中将此id作为外键引用。
外键是一个整数,大小为4个字节。另一方面,日期为3个字节。
因此,我建议您在tblRegDate中保留日期,而不是在额外的表格中
答案 2 :(得分:1)
规范化数据库结构时,请始终注意ACID - http://en.wikipedia.org/wiki/ACID
根据您拥有的字段,您应该将其保留为单个表格。分开注册日期不是一个好的设计,因为你每次都要查看。在现实生活中,如果您的应用始终按照regdate搜索或排序,则可以考虑索引注册日期。
如果您将FK RegDate表添加到用户表,那么它也无效率。
P.S。另请注意,有4个级别的数据库规范化。如果您不熟悉数据库设计,则应考虑学习如何将数据库设计从第1个移到第2个,以及第2个到第3个常规形式。
我们很少在现实生活中使用第4范式。交易系统通常在大多数时间保持在第3位。
希望有意义。