Database 桌子上的东西太少了?

Database 桌子上的东西太少了?,database,database-design,Database,Database Design,我正在创建一个网站,用户应该指定的内容之一是他/她的国家。我想大约有200个国家。哪种方法更好?将200个国家/地区存储在应用程序中的列表/数组中(因此RAM使用率更高),还是将它们存储为数据库中的表?这些问题通常是如何解决的?一个200行的表格本身并不是一个坏习惯。主要问题是将您的国家/地区列作为此表的外键的技术复杂性。各国是否定期来来去去?他们是否经常以需要将所有名称集中在一个表中的方式更改名称 我通常的方法是简单地将数据存储在char(2)列中。这使您能够快速推断实际国家的名称(而不是检查

我正在创建一个网站,用户应该指定的内容之一是他/她的国家。我想大约有200个国家。哪种方法更好?将200个国家/地区存储在应用程序中的列表/数组中(因此RAM使用率更高),还是将它们存储为数据库中的表?这些问题通常是如何解决的?

一个200行的表格本身并不是一个坏习惯。主要问题是将您的国家/地区列作为此表的外键的技术复杂性。各国是否定期来来去去?他们是否经常以需要将所有名称集中在一个表中的方式更改名称

我通常的方法是简单地将数据存储在
char(2)
列中。这使您能够快速推断实际国家的名称(而不是检查国家ID 37的含义),而无需实际引入额外的表、额外的联接


现在,如果您的应用程序实际上以这样一个国家的数据为中心,那么有一个包含多个列的国家表来存储有关该国家的信息是有意义的,但是我建议使用两个字母的国家代码作为该表的主键。

200行表本身并不是一种坏做法。主要问题是将您的国家/地区列作为此表的外键的技术复杂性。各国是否定期来来去去?他们是否经常以需要将所有名称集中在一个表中的方式更改名称

我通常的方法是简单地将数据存储在
char(2)
列中。这使您能够快速推断实际国家的名称(而不是检查国家ID 37的含义),而无需实际引入额外的表、额外的联接


现在,如果您的应用程序实际上以这样一个国家的数据为中心,那么有一个包含多个列的国家表来存储有关该国家的信息是有意义的,但是我建议使用两个字母的国家代码作为该表的主键。

行数较少不是问题。如果一个表很小,数据库服务器可以将整个表缓存在内存中。数据库可以使用小表

如果将国家/地区存储在表中,则始终可以设置应用程序级缓存,将内容的副本保存在内存中。当需要时,在数据库中添加新条目很容易,您可以在缓存上设置过期时间,以便提取新条目


我构建应用程序的首选方法是拥有一个与应用程序代码分离的应用程序级缓存,这样我就可以在不更改代码的情况下对其进行调整。这样,我知道我可以在以后调整缓存,而不必更改代码,也不必在编写代码时考虑缓存

拥有少量行不是问题。如果一个表很小,数据库服务器可以将整个表缓存在内存中。数据库可以使用小表

如果将国家/地区存储在表中,则始终可以设置应用程序级缓存,将内容的副本保存在内存中。当需要时,在数据库中添加新条目很容易,您可以在缓存上设置过期时间,以便提取新条目


我构建应用程序的首选方法是拥有一个与应用程序代码分离的应用程序级缓存,这样我就可以在不更改代码的情况下对其进行调整。这样,我知道我可以在以后调整缓存,而不必更改代码,也不必在编写代码时考虑缓存

定义“更好”。只需按预期方式使用数据库即可。“过早的优化是万恶之源。”——KnuthMy当前关于“更好”/“最好”等的一般评论:在工程中没有“更好”/“最好”这样的东西,除非你定义它。同样不幸的是,所有合理的实用定义都需要大量的经验,其中包含大量的因素,这些因素与对细节的敏感度混乱相互作用。做简单的设计。当你通过测量证明一个设计和你能想到的所有备选方案都有问题(无论当时是什么意思),然后问一个非常具体的问题。还应定义“更好”/“最佳”。定义“更好”。只需按预期方式使用数据库即可。“过早的优化是万恶之源。”——KnuthMy当前关于“更好”/“最好”等的一般评论:在工程中没有“更好”/“最好”这样的东西,除非你定义它。同样不幸的是,所有合理的实用定义都需要大量的经验,其中包含大量的因素,这些因素与对细节的敏感度混乱相互作用。做简单的设计。当你通过测量证明一个设计和你能想到的所有备选方案都有问题(无论当时是什么意思),然后问一个非常具体的问题。还应定义“更好”/“最佳”。