MS SQL 服务器,基于另一个 table 创建和更新一个 table

MS SQL Server, Create and update a table based on another table

我想尝试创建一个与另一个 table 具有相同结构的布尔值 table。我知道如何创建 table 但我的问题是更新。

假设我有 table A1 有 10 列,每个人都有不同的属性,例如身高,运行 速度,名字,头发颜色等

然后我希望能够通过在 table A1 中删除或添加列来修改此 table 并且这些更新适用于我的其他列B1 所以它有相同的列但是一个布尔值(布尔值不是基于 A1)。

我的第一个问题是它是否可行。

我的第二个问题是:对于比方说 200-300 条记录,更新会超级低效吗?

(我可能会创建一个外部程序来读取 table 并通过 ADD/DROP sql 语句手动删除和添加列,但我希望有更多 dynamic/efficent解)

而不是向 table 添加和减去列。我建议您使用具有固定属性的 table。然后有另一个 table 存储附加属性(列的名称),然后是第三个 table 保存人的 ID、属性和属性值。

例如用户 table :

UserId
Firstname
Surname

属性table

AttrId
AttrName

用户属性table:

UserId  
AttrId 
AttrValue

为了回答您的问题,您可以有两组这样的 table,但是第二组的 AttrValue 是布尔值 table。

中间选项是在 table 中寻找多个备用列,并使用属性 table 存储列名和布尔值以指示该列是否正在使用

正如发布的另一个答案,您想要的是 EAV 架构 "entity - attribute - value"。这允许您在不更改任何物理 table 架构的情况下动态添加新属性。它的性能也很糟糕(但只有几百个实体应该不会太糟糕)。

另一个同样丑陋的解决方案是添加你认为你永远需要的尽可能多的列,命名为 Attribute_1、Attribute_2 等。然后你有一个查找 table允许您将属性映射到它们的定义。

这不如 EAV 架构灵活,但允许您对特定属性进行索引,以便您的查询性能更高一些。

另一种解决方案是使用 XML 数据类型来保存属性和值。 SQL 服务器具有 XML 数据的内置功能,虽然它不像普通 SQL 那样易于使用,但它确实工作得很好。