我有这样的结果数据:
1. account, name, #, etc
2. account, name, #, etc
...
10. account, name, #, etc
我每周都会生成大约1组结果数据。
目前它的存储方式如下:
DATETIME DATA_BLOB
这很烦人,因为我无法在不将BLOB解析为自定义对象的情况下查询任何数据。我正在考虑改变它。
我正在考虑拥有一张巨大的桌子:
DATETIME RANK ACCOUNT NAME NUMBER ... ETC
date1 1 user1 nn #
date1 2 user2 nn #
...
date1 10 userN nn #
date2 1 user5 nn #
date2 2 user12 nn #
...
date2 10 userX nn #
我对数据库设计原则一无所知,所以有人可以就这是一个好的方法或者可能有更好的方法给我反馈吗?
由于
答案 0 :(得分:1)
如果没有一对多关系,我认为有这样的表是可以的。在这种情况下,拥有多个表会更有效,如下面的示例所示。以下是一些一般性提示:
提示:良好做法我的教授告诉我,拥有一个“ID”列总是好的,这是表中每个项目的唯一编号标识符(1,2,3 ......等等) )。 (也许这就是你的“数字”专栏的意图。)我认为SQLite强制每个表都有一个ID列。
提示:节省存储空间 - 此外,如果存在一对多关系(例如:一个名称有多个帐户),那么可能会节省空间有一个单独的帐户表,然后将名称的ID存储在第一个表中 - 这样你就可以存储许多整数而不是重复的字符串。
提示:效率 - 某些数据库具有专门用于处理多对一或多对多等关系的特定框架,所以如果你使用他们的框架(我不记得究竟如何做),它可能会更有效地工作。
提示:节省存储空间 - 如果您创建自己的ID列,如果它自动包含“ID”列,则可能会浪费 - 因此您可能需要检查这种可能性。 / p>
概念示例:(存储多个同名帐户)
糟糕的解决方案: 将所有内容存储在1个表中(效率低,因为它复制了Bob的名称,等级和日期时间):
ID NAME RANK DATETIME ACCOUNT
1 Bob 1 date1 bob_account_1
2 Joe 2 date2 user2_joe
3 Bob 1 date1 bob_account_2
4 Bob 1 date1 bobs_third_account
更好的解决方案:有2个表来防止重复信息(还演示了ID的有用性)。我将2个表命名为“帐户”和“名称”。
表1:“帐户”(请注意,NAME_ID指的是表2中的ID列)
ID NAME_ID ACCOUNT
1 1 bob_account_1
2 2 user2_joe
3 1 bob_account_2
4 1 bobs_third_account
表2:“名称”
ID NAME RANK DATETIME
1 Bob 1 date1
2 Joe 2 date2
我不是数据库专家,所以这只是我在网络编程课程中学到的一些内容。我希望这有助于引导您进一步研究正确的方向。