相关疑难解决方法(0)

数据库设计 - 多个查找/枚举表或一个大表?

我有很多表使用Lookup/Enum引用来表示大多数列值.例如:
Person Table - PersonID | RaceCode | HairColorCode | HairStyleCode | TeethConditionCode
位置表 - LocationID | SizeCode | ExteriorColorCode | ConditionCode
Race,Size,Color,Condition等之类的东西只是代码查找表的外键引用.此代码表包含其他字段,但对我的问题并不重要.该数据库用于SaaS应用程序,这意味着每个客户端都可以拥有自己的颜色,种族,条件等列表.有些代码是静态的,客户端无法更改.

拥有1个代码表或2种类型的代码表(DynamicCodeTable用于客户定义的代码表和StaticCodeTable用于那些更改的代码表)或者我应该为每种代码类型(RaceCodeTable,HairColorTable,Condition等)提供表格更好吗?

我最担心的是所有sql连接.我正在使用的Person表有20多个这些代码属性.加入20个不同的表VS连接到同一个表20次时,性能是否有差异?拥有多个表意味着每个表都会更小,查找"应该"花费更少的时间.但是拥有一张桌子也很快.有什么建议?

database-design saas

15
推荐指数
2
解决办法
7136
查看次数

如何为枚举char(1)数据库字段实现C#枚举?

好的,所以我有一个char(1)类型的数据库字段,它有少量可能的状态代码(例如'F'= Failure,'U'= Unknown等).我想要一个与这些状态相对应的C#enum类.我可以:

public enum StatusCode : byte {
    Unknown = (byte) 'U',
    Failure = (byte) 'F',
    // etc.
}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是在从数据库返回的DataTable中,列值是System.Data.SqlTypes.SqlString实例.显然有一些问题从C#字符串(甚至是C#字符)转换为C#字节(因为C#char实际上是UTF-16代码点).但在这种情况下,我知道值被约束为一个小集合,如果此集合之外的值通过,代码应抛出异常.

考虑到这一点,最好的方法是什么?从SqlString转换为字节是否安全?Convert.ToByte()会更好吗?简单地使用开关/案例构造将值交叉到枚举中会更好吗?

我正在寻找"最好"的方法,不仅在获得正确的结果方面,而且在代码清晰度方面.我想我也可以使用一些常量

public const char UnknownStatus = 'U';
public const char FailureStatus = 'F';
Run Code Online (Sandbox Code Playgroud)

但如果可能的话,我宁愿使用枚举.有什么想法吗?

编辑:为了澄清我想要做什么,我希望在我的代码中经常使用这些值.例如,我希望能够做到这样的事情:

public void DoSomething(StatusCode currentStatus) {
    if(currentStatus == StatusCode.Failure) {
        throw new SomeException();
    }

    switch(currentStatus) {
        case StatusCode.Unknown:
            // do something
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

等等.我特别想避免这样的事情:

public void DoSomething(char currentStatus) {
    if(currentStatus == 'F') {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

因为在这种情况下,我正在使用相当于"神奇数字"的地方.特别是,这将使迁移到其他一些状态标记系统几乎是不可能的.那有意义吗?

c# byte ascii

5
推荐指数
1
解决办法
5314
查看次数

标签 统计

ascii ×1

byte ×1

c# ×1

database-design ×1

saas ×1