JRo*_*ert 16 database sql-server schema entity-framework entity-attribute-value
如果你必须创建一个类似的应用程序 - 比如一个博客应用程序,那么创建数据库模式就相对简单了.你必须创建一些表,tblPosts,tblAttachments,tblCommets,tblBlaBla ......就是这样(好吧,我知道,这有点简化,但你理解我的意思).
如果你有,你要允许用户定义模式的部分应用程序在运行时.假设您要构建一个用户可以记录任何类型数据的应用程序.一个用户想要记录他的工作时间(startTime,endTime,项目ID,描述),下一个想要收集烹饪食谱,其他人可能是股票报价,他们的婴儿每周体重,他们花在食物上的每月费用,他们的结果最喜欢的足球队或你能想到的任何东西.
您如何设计数据库来保存所有非常不同类型的数据?您是否会创建一个可以包含所有类型数据的通用模式,是否可以创建反映用户数据模式的新表,或者您是否有另外一个好主意可以做到这一点?
如果它很重要:我必须使用SQL Server/Entity Framework
Wil*_*ung 11
让我们再试一次.
如果您希望他们能够创建自己的架构,那么为什么不使用,哦,我不知道,CREATE TABLE语句来构建架构.你有一个完整的船,功能齐全,功能强大的数据库,可以做一些惊人的事情,如定义模式和存储数据.为什么不用它?
如果你只是想做一些临时属性,那么肯定.
但如果它是"全权委托,他们可以做任何他们想做的事情",那就让他们吧.
他们必须知道SQL吗?嗯,不.那是你的UI任务.您作为工具和应用程序设计人员的工作是隐藏用户的实现.如果你想要关系,那么现在的字段,行和箭头列表.无论如何.
人们多年来一直在制作"最终用户","简单"的数据库工具.
"如果他们想要添加一个列怎么办?" 然后添加一个列,数据库就是这样做的,至少是最好的.如果没有,请创建新表,复制旧数据,删除旧数据.
"如果他们想要删除列怎么办?" 往上看.如果您的列无法删除,请将其从用户的逻辑视图中删除,以使其看起来已删除.
"如果他们有数十亿行数据怎么办?" 然后他们有数十亿行数据和操作比他们拥有1行数据的时间长了11亿次.如果他们有数十亿行数据,他们可能不应该使用你的系统.
"实施数据库数据库"的魅力使我无法理解.
"我在这里有Oracle,我怎样才能提供更少的功能,让用户的速度更慢?"
哎呀,我想知道.
Bil*_*win 10
您无法预测其数据要求的复杂程度.Entity-Attribute-Value是许多程序员使用的典型解决方案,但它可能就足够了,例如,如果用户的数据通常用多个表建模.
我将用户的自定义数据序列化为XML或YAML或JSON或类似的半结构化格式,并将其保存在文本BLOB中.
您甚至可以创建反向索引,以便在BLOB中的属性中查找特定值.请参阅http://bret.appspot.com/entry/how-friendfeed-uses-mysql(该技术适用于任何RDBMS,而不仅仅是MySQL).
还要考虑使用Solr或MongoDB等文档存储.这些技术不需要符合关系数据库约定.您可以在运行时向任何文档添加新属性,而无需重新定义架构.但这是一种权衡 - 没有架构意味着你的应用程序不能依赖整个集合中类似的文档/行.
我是实体 - 属性 - 价值反模式的批评者.
我在我的书" SQL Antipatterns:避免数据库编程的陷阱"中写过关于EAV问题的文章.
这是一个SO答案,我在其中列出了Entity-Attribute-Value的一些问题:" 产品表,多种产品,每种产品都有许多参数."
这是我前几天发布的关于EAV问题的更多讨论的博客:" EAV FAIL."
并且一定要阅读这篇博客" Bad CaRMa ",了解如何使一个完全灵活的数据库几乎摧毁了一家公司.
| 归档时间: |
|
| 查看次数: |
6085 次 |
| 最近记录: |