c# - 为什么在运行时(代码隐藏)创建表是不好的?

标签 c# sql

人们建议应避免动态(或在运行时)创建数据库表,据说这是不好的做法并且难以维护。

我看不出原因,也看不出创建表与任何其他 SQL 查询/语句(例如 SELECT 或 INSERT)之间的区别。我编写了在运行时创建、删除和修改数据库和表的应用程序,到目前为止我没有看到任何性能问题。

谁能解释一下在运行时创建数据库和表的缺点?

最佳答案

表是比行复杂得多的实体,管理表创建比必须遵守现有模型(表)的插入要复杂得多。诚然,表创建语句是标准的 SQL 操作,但依赖于动态创建它们有点糟糕的设计决策。

现在,如果您只创建一两个就可以了,或者动态地创建整个数据库,或者一次从脚本创建,那可能没问题。但是,如果您依赖于必须创建越来越多的表来处理您的数据,您也将需要越来越多地加入和查询越来越多。我在使用动态表创建的应用程序中遇到的一个非常严重的问题是单个 SQL Server 查询只能涉及 255 个表。这是一个内置的约束。 (那是 SQL Server,不是 CE。)在生产中只用了几个星期就达到了这个限制,导致应用程序无法运行。

如果您开始编辑表格,例如添加/删除列,那么您的维护问题会变得更糟。还有将数据库数据绑定(bind)到应用程序逻辑的问题。另一个问题是升级生产数据库。如果数据库随着对象动态增长而您突然需要更新模型,这将是一个真正的挑战。

当您需要以这种动态方式存储数据时,标准做法是使用 EAV models .您有固定的表,并且您的数据作为行动态添加,因此您的模式不必更改。这当然有缺点,但通常被认为是更好的做法。

关于c# - 为什么在运行时(代码隐藏)创建表是不好的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5999756/

相关文章:

c# - 检查 T 泛型类型是否具有 C# 中的属性 S(泛型)

c# - 是否可以将 <Window.Resources> 移动到单独的文件?

sql - 为什么我在尝试创建这个简单函数时收到 PLS-00103?

sql - 别名上的 JOIN 语句 - SQL Server

sql - SELECT <A OR B> FROM my_table WHERE A=5 OR B=5;

c# - XML 序列化 - .NET 4.0 中的不同结果

c# - 无法将字符串(包含数字)转换为 int?

c# - sql本地数据库连接

sql - 在关系数据库中建模原子事实

mysql - SQL 连接三个表并拆分为列