代码之家  ›  专栏  ›  技术社区  ›  Sillyreduction

MS SQL Server,基于其他表创建和更新表

  •  0
  • Sillyreduction  · 技术社区  · 9 年前

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

    假设我有桌子 A1类 共有10列,每个人有不同的属性,如身高、跑步速度、姓名、头发颜色等。

    然后,我希望能够通过删除或向表中添加列来修改此表 A1类 这些更新适用于我的其他专栏 地下一层 所以它有相同的列,但有一个布尔值(布尔值不是基于A1的)。

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

    我的第二个问题是:对于200-300条记录来说,更新会不会超低效。

    (我可能会创建一个外部程序来读取表,并通过ADD/DROP sql语句手动删除和添加列,但我希望有一个更动态/有效的解决方案)

    2 回复  |  直到 9 年前
        1
  •  0
  •   Eric    9 年前

    作为另一个答案,您想要的是EAV模式“实体-属性-值”。这允许您动态添加新属性,而无需更改任何物理表模式。它的性能也很糟糕(但如果只有几百个实体,也不应该太糟糕)。

    另一个同样难看的解决方案是添加您认为需要的尽可能多的列,名为Attribute_1、Attribute_2等。然后您就有了一个查找表,可以将属性映射到它们的定义。

    这不如EAV模式灵活,但允许您对特定属性进行索引,从而使查询的性能更高一些。

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

        2
  •  0
  •   Mike    9 年前

    而不是在表中添加和减去列。我建议您使用一个具有固定属性的表。然后有另一个表存储其他属性(列的名称),然后有第三个表保存人员的id、属性的is off和属性的值。

    例如,用户表:

    UserId
    Firstname
    Surname
    

    属性表

    AttrId
    AttrName
    

    UserAttribute表:

    UserId  
    AttrId 
    AttrValue
    

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

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