关系数据库结构逻辑配置

时间:2015-09-11 14:36:40

标签: mysql database logic structure relational-database

我将使用MySql RDBMS在服务器端开发关系数据库。

由于这个数据库将包含许多信息,并且会有许多同步查询,我想设置一个优化的结构,以避免在检索数据时进程缓慢。

我的主表名为“account”,其中包含有关姓名,姓名ecc ..的用户信息:

 TABLE 'account'

 ID - NAME - SURNAME - AGE

 Primary key -> 'ID'

第二个表将被称为“文件”并具有一个id(外键引用account.id),一个文件名和一个名为'count'的列:

 TABLE 'file'

 ID - FILENAME - COUNT

 Primary key -> {'ID','FILENAME'}

 Foreign key -> 'ID' -> 'account.ID'

我的上一张桌子名为'visit'并具有以下结构:

 TABLE 'visit'

 ID - FILENAME - OPTION

 Primary key -> {'ID','FILENAME'}

 Foreign key -> 'ID' -> 'account.ID'
 Foreign key -> 'FILENAME' -> 'file.FILENAME'

虽然第一个表不包含很多行,但第二个表可能包含数千行,第三个表包含数十万行。

也许我错了(我不是数据库系统管理和优化方面的专家:D),但是如果我在“访问”表上同时查询这么多行并与其他表连接,那么这个过程可能会变成慢。

这种结构是好还是可以改进?

最后一个问题,我可以自动更新'文件' - > 'count'列包含'visit'中包含的行数,其中'file.filename'='visit.filename'当'visit'表更新时?

或者最好每次都像'来自ecc的SELECT count(*)那样进行查询?

希望我解释自己,谢谢。

1 个答案:

答案 0 :(得分:2)

根据您的评论,您的想法听起来不错,但一切都取决于业务,即业务逻辑 - 如果您正在考虑制作每日报告, 周,每月访问;如果企业有兴趣了解其历史 过去10年,20年或30年的访问。根据这一点,您可以不时地创建具有一段时间(可能是一年)的历史数据表。

正如您所看到的,有许多方法,您还应该考虑到业务的一部分 技术方面,如磁盘空间,备份等,保持多重要 历史数据以及持续多长时间。

修改

关于你的第二个问题,是的,你可以,如果你实施了一个触发器。但是你可以查看这个不错的链接,以确保你是否做出了创建触发器的好决定。 (我不喜欢复制和粘贴,所以我更喜欢分享链接,如果我违反规则,请告诉我)

https://softwareengineering.stackexchange.com/questions/123074/sql-triggers-and-when-or-when-not-to-use-them

更新V.2.0:

建议:

  1. 尝试不在列名上使用受限制的名称(如count,option),我不完全是在mysql 上受限制但在SQL SERVER中是的,所以 for portability 最好不要使用这样的名字。

  2. 就像Jonathan Leffler所说,除了年龄,这不是一个好主意,你可以选择保存生日。