c# - 每个数据库单元保存多个项目

标签 c# asp.net sql sql-server

我有一个国家列表。每个用户可以检查多个国家。保存后,此“用户国家/地区列表”将用于获取其他用户是否适合特定用户选择的国家/地区。

问题是解决这个问题最有效的方法是什么......

我有一个,一个用于将用户选择保存为分隔列表,如加拿大、美国、法国......在单个 varchar(max) 字段中,但问题是,一旦来自德国的用户进入页面,我将执行此检查。要搜索德国,我需要获取所有项目并取消分隔每个字段以检查值或使用 sql 'like',这又是非常慢的......

如果您有更好的解决方案或一些提示,我会很高兴听到。

只是为了确保,许多用户将有自己的国家/地区选择,并且只有他们希望用户登陆他们的页面。而数百万用户将访问这些页面。因此越快越好。

技术、MSSQL 和 ASP.NET

谢谢

最佳答案

您不应在一个单元格中存储一列值。考虑有一个单独的表来存储每个选定的国家和用户表的外键引用。这是标准 Database Normalization .

不要按照您的想法行事,不要在一个字段中存储多个条目。由于糟糕的数据库设计,我不得不重写的应用程序比任何其他原因都多,这是一个糟糕的设计。

已添加

我工作时在墙上贴了这张海报:http://www.informationqualitysolutions.com/FreeStuff/rettigNormalizationPoster.pdf

我的一位前辈是 DB Design 的新手,这对她帮助很大。我会为可能需要它的任何新员工保留它。它通过示例很好地解释了规范化。

关于c# - 每个数据库单元保存多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2825775/

相关文章:

c# - 使用 SharpSvn C# 进行分支/标记

c# - 如何在 WCF 中识别经过身份验证的用户?

c# - 获取一个月中的第 x 个最后一个工作日(不是假期)

asp.net - System.Web.Security.AntiXss.AntiXssEncoder 与 Microsoft.Security.Application.AntiXssEncoder

c# - 无法将类型 'System.Data.DataRowView' 的对象强制转换为类型 'System.Data.DataRow'

c# - 如何配置连接字符串到 RDS 实例 (MSSQLServer Express)

sql - 用单引号替换为双单引号在 PostgreSQL 12 中不起作用

MySQL TRIGGER NEW.date=NOW() 在除 `id` 和 `name` 之外的任何列更新

c# - 如何使用 SAS 解决 Azure 事件中心中的授权错误 (401)?

mysql - SQL 事件 - 在更新其他表后删除和更新表上的行