【问题标题】:is adding reserved fields for future values a good idea为未来值添加保留字段是个好主意
【发布时间】:2010-12-19 12:02:29
【问题描述】:

我有像CustomerPurchase 等表格,这些表格有时与它们相关联的文件,文件是指某处的文件(如扫描的驾驶执照或其他东西)

我们不能让应用程序将这些文档直接上传到数据库中,所以我有一个 uniqueidentifier 列用于这些(我应该有一个文件哈希吗?)

我的问题:
将来我们可能会有更多与表格相关联的文档,所以我正在考虑添加额外的字段,例如:

客户
+DriversLicenseDoc
+Document1//面向未来
+Document2 //未来使用

因此,如果他们将来决定需要另一个文档,我只需要更新我的实体框架模型并重命名模型中的列,数据库就不必更改了吗?

这是通常的做法吗?有更好的想法吗?我看到的缺点是我必须让所有这些未来的值都可以为空?也许这不是一个缺点?
还想听听关于部署后您通常如何应对数据库架构变化的想法?

【问题讨论】:

    标签: sql-server database-design entity-framework-4 sql-server-2008r2-express


    【解决方案1】:

    不,这实际上是一个非常糟糕的主意。要么您预见到正确的使用,在这种情况下按原样添加它们,或者您只是在猜测可能发生的情况,您应该等到知道为止。

    部署后处理架构更改的方法是在部署后更改架构(以及任何相关代码)。您应该查看首字母缩略词“YAGNI”。在我的意见中,任何不是立即需要的努力都应该被视为为可能永远需要的事情所做的努力。换句话说,浪费精力。

    如果您可能存在未知数量的文档,这是从客户表到文档表的简单一对多关系,表中的每个文档都带有文档类型和文档有效负载,例如:

    customers:
        custid  primary key
        <all other customer data>
    documents:
        docid primary key
        custid references customers(custid)
        <all other document data>
    

    这样一来,每位客户都可以拥有任意数量的文档,任意类型的文档。

    【讨论】:

    • 我有点同意,但我认为最好以一种你最初没有考虑过的方式“认识到”你需要灵活性,然后可能稍微重新设计以允许“保留” ' 你正在考虑的结构。我不认为为未来做计划是错误的(我相信你也没有,只是在你的回复中没有明确说明)。
    • 不完全确定您所说的按原样添加它们是什么意思,因为客户告诉我,我们将来可能会有多达 5 或 6 个文档(他们没有扫描仪,所以他们现在并没有真正记录所有文件)
    • "表格中的每个文档都带有文档类型和文档有效负载" ...和客户密钥;)
    • 如果您希望在不更改架构的情况下灵活地添加文档,我会将它们全部放在一个表中(无论如何它们都可能都是 BLOB)。
    • @giddy,不确定哈希是否有用。如果您对文档本身进行哈希处理,您将如何取回内容?如果您对文档位置进行哈希处理,您将如何找到它?您可能想考虑只存储文档的位置(机器名称加上完整路径规范,或类似的东西)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2012-02-07
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2013-08-23
    相关资源
    最近更新 更多