3

我开发了一个使用 SQLite 进行数据存储的黑莓应用程序(分类帐管理系统)。

我在我的应用程序中创建的表之间有几种关系

以下是一些表格及其列:

1. Customer Details-Name,Phone,Email
2. Bills-Name,Amount
3. Update Customer-Name
4. Update Bills-ID

和许多其他临时表。

当我开发这个应用程序时,我从来没有真正费心查看我的表格是否被规范化。

现在在我完成我的应用程序之后,我想知道是否需要标准化。

我的大部分查询都是基于选择插入到客户和账单表单中的记录,然后对其进行操作。

例如,我有一个捕获所有客户数据的客户详细信息表。现在,一旦数据库中记录了一个名称,我不希望表中再次出现相同的名称,因此这需要规范化概念。

同样在像 SQLite 这样的 RDBMS 中,规范化是必不可少的。它是否与基于 DBMS 的表具有相同的含义。

在数据库规范化方面,OLAP 和 OLTP 系统之间也有任何区别。如果是,我的黑莓应用程序将归类到什么类别?

如果有人对此表示赞赏,请提供指导。

4

2 回答 2

5

数据库规范化是指关系数据库。SQLite 是像 Oracle、MySQL 或 Postgress 之类的RDBMS(我认为这就是您所说的基于 DBMS 的表的意思),所以是的,规范化适用于存储在 SQLite 中的数据库。当然,您可以像键值存储一样使用 SQLite,但这似乎不是您的情况。

数据库规范化非常重要,但如果您仔细设计表,您通常会在3FN中得到一个数据库,即使没有尝试。追求更高的 FN 可能对您的应用程序来说不是必需的。

OLAP 数据库通常出于效率原因保存非规范化数据。除非您遭受性能问题并且您知道自己在做什么,否则最好不要尝试这样做,特别是在小型应用程序中。

似乎您正在使用一个人的名字作为键。为每个人分配一个数字标识符并使​​用它可能会更好,但这在您的应用程序中可能没有问题。

于 2012-06-19T18:33:52.977 回答
3

如果您想避免在客户表中插入重复行的问题,则需要进行规范化。到什么程度取决于你。您可以通过阅读规范化是什么以及为什么使用它来学习一些好东西。

您不希望在数据库中出现数据冗余(除非出于效率考虑而计划)。冗余会导致不一致,你想要的是数据一致性。在您的情况下,您似乎有一个非常小的数据库,因此您不需要任何冗余。

这是我将如何做的一个例子。

Customer:   custId(PK), custName,
Bills:      billId(PK), custId(FK), amount, timesStamp
CustPhone:  custId(PK)FK), type(PK), number
CustMail:   custId(PK)(FK), type(PK), mail

例如,要从客户那里获取所有账单,它看起来像这样。

SELECT Customer.custId, Bills.billId, Bills.amount, Bills.timeStamp Customer.custName
FROM Bills
JOIN Customer
ON Customer.custId = Bills.custId;

这将为您提供与唯一客户相关联的唯一账单,客户的姓名无关紧要,因为现在的主键是 ID 而不是名称。

我建议你阅读规范化,因为如果你不理解它的基本概念,它真的很难使用。

于 2012-06-19T20:23:20.467 回答