Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Oop 在以静态数据为主的数据库中建立继承模型的最佳方法是什么?_Oop_Data Modeling_Database Schema - Fatal编程技术网

Oop 在以静态数据为主的数据库中建立继承模型的最佳方法是什么?

Oop 在以静态数据为主的数据库中建立继承模型的最佳方法是什么?,oop,data-modeling,database-schema,Oop,Data Modeling,Database Schema,我正在模拟一个角色扮演游戏,需要为设备创建数据库模式。数据大部分是静态的 讨论在数据库中建模继承的三种方法:每个类层次结构的表、每个子类的表和每个具体类的表。在这三种中,你推荐哪一种 我做了一个EntityFramework4.2CodeFirst解决方案的示例,看看它是如何产生的,它使用了“每个类的表层次结构”方法 以下是(简化)类: 每件事都有权衡。你需要选择最适合你的方法。每次调用层次结构的缺点是,表需要具有任何子类上的所有字段,这可能意味着表中的某些行占用的空间比需要的多,因为它们没有一

我正在模拟一个角色扮演游戏,需要为设备创建数据库模式。数据大部分是静态的

讨论在数据库中建模继承的三种方法:每个类层次结构的表、每个子类的表和每个具体类的表。在这三种中,你推荐哪一种

我做了一个EntityFramework4.2CodeFirst解决方案的示例,看看它是如何产生的,它使用了“每个类的表层次结构”方法

以下是(简化)类:


每件事都有权衡。你需要选择最适合你的方法。每次调用层次结构的缺点是,表需要具有任何子类上的所有字段,这可能意味着表中的某些行占用的空间比需要的多,因为它们没有一些字段。此外,您还需要一种方法来区分加载行时要使用哪种类型的类


另一方面,每个类的层次结构很容易实现。子类之间的数据越不一致,其他策略就越有吸引力。

您可以进行名称-值配对。拥有一个包含id、名称、Attribute1名称和Attribute1值的齿轮表。根据需要设置尽可能多的名称/值列


因此,如果您存储的是护甲物品attribute1 name将是Kinetic,attribute1 value将是Kenetic的值。Attribute2Name将是Energy,Attribute2Value将是Energy

的值,我决定按照每个子类使用表。我有太多不同类型的子类,无法使每个类的表层次结构具有吸引力。我用它作为出发点。
public class Gear {
    public int GearID { get; set; }
    public string Name { get; set; }
}

public class Armor : Gear {
    public int Kinetic { get; set; }
    public int Energy { get; set; }
}

public class Weapon : Gear {
    public int Damage { get; set; }
    public int Range { get; set; }
}