我已经开发了一个黑莓应用程序(账本管理系统),它使用SQLite进行数据存储。
在我的应用程序中创建的表之间有几个关系
以下是一些表及其列:
1. Customer Details-Name,Phone,Email
2. Bills-Name,Amount
3. Update Customer-Name
4. Update Bills-ID和许多其他临时表。
当我开发这个应用程序时,我从来没有真正费心去查看我的表是否被标准化了。
现在,在我完成我的应用程序后,我想知道是否需要规范化。
我的大多数查询都是基于选择插入到客户和账单表单中的记录,然后对它们进行操作。
例如,我有一个Customer Details表,它捕获了所有的customer data.Now一旦名称被记录在数据库中,我不希望相同的名称再次出现在表中,因此这将需要标准化概念。
在像SQLite这样的关系数据库管理系统中,还有规范化essential.Does,它与基于数据库管理系统的表具有相同的含义。
另外,OLAP和OLTP系统在数据库规范化方面有什么区别吗?如果是,我的黑莓应用程序将被归类为什么?
如果有人对此有意见,请多多指教。
发布于 2012-06-20 02:33:53
Database normalization指的是关系数据库。SQLite是一个类似于Oracle、MySQL或Postgress的RDBMS (我想这就是你所说的基于数据库管理系统的表),所以是的,规范化适用于存储在SQLite中的数据库。当然,您可以像使用键值存储一样使用SQLite,但这似乎不是您的情况。
数据库规范化是非常重要的,但是如果您仔细设计表,您通常会得到一个使用3FN的数据库,即使没有尝试过。对于你的应用程序来说,选择更高的FN可能并不是必须的。
出于效率的原因,OLAP数据库通常保存非规范化数据。除非您受到性能问题的困扰,并且您知道自己在做什么,否则最好不要尝试这样做,特别是在小型应用程序中。
您似乎正在使用人名作为关键字。给每个人分配一个数字标识符并使用它可能会更好,但这在您的应用程序中可能没有问题。
发布于 2012-06-20 04:23:20
如果您希望避免在customer表中插入重复行的问题,则需要进行规范化。在多大程度上取决于你。通过阅读normalization是什么以及为什么要使用它,您可以学到一些好东西。
数据库中你不想要的是data redundancy (除非出于效率方面的原因,它是为它而设计的)。冗余会导致不一致,你需要的是数据的一致性。在您的情况下,您似乎有一个相当小的数据库,所以您不需要任何冗余。
这里有一个我会怎么做的例子。
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,而不是名称。
我建议你阅读有关规范化的知识,因为如果你不理解它的基本概念,那么使用它真的很难。
https://stackoverflow.com/questions/11106732
复制相似问题