Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 支持动态实体的数据库设计_Sql Server_Database Design - Fatal编程技术网

Sql server 支持动态实体的数据库设计

Sql server 支持动态实体的数据库设计,sql-server,database-design,Sql Server,Database Design,好吧,我不知道这个问题是否属于这个地方,但如果我错了,你会建议我的 我有一些实体具有几乎相同的属性,差异可能在2-3列中 由于这些不同的列,我无法创建一个表,其中的列是每个实体属性的并集,因为新的实体类型将需要更改表设计并添加特定于该实体类型的新列 相反,当前的工作设计是每个特定实体都有自己的表 但,若新类型的实体出现在场景中,我必须创建新的表,这完全是个坏主意 如何创建一个表,其中包含每种类型实体的共享属性,以及一些额外的机制来证明实体的唯一属性 所以,我们的想法是简单地添加新类型的对象,而不

好吧,我不知道这个问题是否属于这个地方,但如果我错了,你会建议我的

我有一些实体具有几乎相同的属性,差异可能在2-3列中

由于这些不同的列,我无法创建一个表,其中的列是每个实体属性的并集,因为新的实体类型将需要更改表设计并添加特定于该实体类型的新列

相反,当前的工作设计是每个特定实体都有自己的表

但,若新类型的实体出现在场景中,我必须创建新的表,这完全是个坏主意

如何创建一个表,其中包含每种类型实体的共享属性,以及一些额外的机制来证明实体的唯一属性

所以,我们的想法是简单地添加新类型的对象,而不改变数据库设计,只配置处理唯一列的部分


另外,可能我不清楚,但如果需要,我会添加更多描述。

我曾经有过这样的设计。我所做的是创建了一个包含所有共享属性的表。然后,我为不同的值设置了单独的表。我使用联接将特定实体与其共享表行相匹配。我只有不到10个,所以当我添加一个新实体时,我刚刚更新了使用联合的视图。但是,如果使用命名约定,则可以编写存储过程,动态查找表名并动态执行联合和联接。在我的例子中,我使用基类和特定类来创建自定义数据层


另一种可能是有一个基本上是名称/值对的通用表和一个表示共享属性的表。通过将这些表连接在一起,您可以为您的实体拥有任意数量的特定于实体的属性。这不是很有效,SQL也会变得很奇怪,但我已经看到了。我曾经有过这样的设计。我所做的是创建了一个包含所有共享属性的表。然后,我为不同的值设置了单独的表。我使用联接将特定实体与其共享表行相匹配。我只有不到10个,所以当我添加一个新实体时,我刚刚更新了使用联合的视图。但是,如果使用命名约定,则可以编写存储过程,动态查找表名并动态执行联合和联接。在我的例子中,我使用基类和特定类来创建自定义数据层


另一种可能是有一个基本上是名称/值对的通用表和一个表示共享属性的表。通过将这些表连接在一起,您可以为您的实体拥有任意数量的特定于实体的属性。这不是很有效,SQL会变得奇怪,但我已经看到了。一种解决方案是将公共部分存储在一个表中,而特定部分存储在特定于该实体的表中

要有一群人,其中有些是经理

人员表

PersonID
PersonName
经理台

ManagerID
PersonID
DepartmentManaged

一旦你走上拥有一个具有可变字段含义的表的道路——实际上是一个实体属性值设计——你就会发现自己陷入地狱

一种解决方案是将公共部分存储在一个表中,将特定部分存储在特定于该实体的表中

要有一群人,其中有些是经理

人员表

PersonID
PersonName
经理台

ManagerID
PersonID
DepartmentManaged

一旦你走上拥有一个具有可变字段含义的表的道路——实际上是一个实体属性值设计——你就会发现自己陷入地狱

也许不是最好的或最学术的,但是这种“开放式结构”呢

MainTable:所有公共字段

特殊属性:根据需要提供额外属性
-MainRecordId(P,F->MainTable)
-PropertyName(P)
-PropertyText

-PropertyValue(用于数值)

也许不是最好的或最学术的,但这种“开放式结构”又如何呢

MainTable:所有公共字段

特殊属性:根据需要提供额外属性
-MainRecordId(P,F->MainTable)
-PropertyName(P)
-PropertyText

-PropertyValue(用于数值)

您使用的是实体框架还是其他ORM?实体是表中记录的术语,在这种情况下,您应该学习“子类”和ORM。这将帮助你弄清楚选择是什么,即使你“自己动手”。这是一篇入门文章:您是在使用实体框架还是其他ORM?实体是表中记录的术语,在这种情况下,您应该学习“子类”和ORM。这将帮助你弄清楚选择是什么,即使你“自己动手”。这是一篇入门文章:好的,这是一种方法,但当出现新对象时,我必须更改数据库设计,以及映射这些新表的代码。我添加了另一个我曾经见过的解决方案,它更具动态性,但更难实现。好吧,这是一种方法,但当出现新对象时,我必须更改数据库设计,以及映射这些新表的代码。这是真的。我添加了另一个我曾经见过的解决方案,它更具动态性,但更难实现。