2010-09-15 25 views
0

我需要帮助。我不知道创建我需要的表的正确方法是什么。我可以以不同的方式做到这一点,但我可能会以一种愚蠢的方式去做。创建字段/值表的正确方法?

这是我的情况的一个例子。

我有人。 每个人都有领域。

字段可能是:ShirtType,PantType,HairColor,EyeColor,ShoeType,Height,Weight等。 我将来需要添加其他字段。

每个人不得使用所有字段。 (有些人只会使用一个字段)。

我应该:

  1. 所有领域列上创建一个表,只是把的那些数据我每次都需要什么?

OR

  • 创建一个字段表来容纳所有的字段名称。然后,创建一个值表来保存由FieldId引用的值?
  • 第一个似乎不那么令人困惑,但第二个浪费更少的空间。 NULL字段(方法1)浪费空间吗?糟糕的设计? 我可以很容易地将数据导入第一种方法,但第二种方法是我必须一次添加值列表和字段ID,一个值列表。可能需要一段时间。

    我很抱歉,如果这不合理,但我真的可以使用一些建议。

    谢谢。

    回答

    0

    “类型”字段可以进入两个中的一个类型的表 - 无论是外国键表或“查找”表。在某个领域只有几个可能的值的地方,我倾向于使用查找表。他们有像lookupType这样的字段,可以是“ShirtType”,“PantType”等,用于选择正确的行。再就是像lookupKey字段(唯一的,像一个int,“主密钥”)和lookupValue(所述记录的值,如“T恤的”或“长套筒”)

    在此单一的记录的实例表可能是:

    lookupType lookupKey lookupValue 
    Gender  1   Male 
    ShirtType 1   T-Shirt 
    Gender  2   Female 
    PantType 1   Shorts 
    ShirtType 2   Long Sleeve 
    

    所以,你对所有的性别类型的查询看起来像:

    SELECT lookupKey, lookupValue 
    WHERE lookupType = 'Gender' 
    
    0

    如果你有一个相对较小的和可知的数量“字段” - 也就是说,你AREN我们不会去想更多的f需要在以后添加 - 那么第一种方式是可以接受的。

    但在其他情况下,如果您不知道有多少个字段或有大量字段,或者可能需要添加新字段,则只需添加另一个表。它给出了适当的关系建模和更容易的扩展性。

    编写一些代码来改变你的“平”的记录到正确的数据库结构进行再利用,然后插入都一样,如果它是在一个表中那样简单。

    0

    如果每个人只有一种类型的每个人,你可以把它全部放在一张桌子上。如果一个人有两个或两个以上的相同(即2个ShirtTypes),那么你应该考虑为不同的领域提供一个表格,这样你可以做更好的搜索。

    如果您需要2个或更多的某种类型的字段,我会举例说明。您还需要表格来告诉您每个值是什么意思。而且,你不使用,不知道还值或刚添加的领域,完全可以对他们0(或NULL,但我宁愿0):

    表:PersonCommonInfo只有地方这里什么人都有只有一次,绝不能有两个或两个以上

    PersonId Gender Height Weight HairColor EyeColor SkinColor 
    1   M  55  200  1   1   0 
    2   M  60  220  7   0   0 
    3   F  50  130  0   4   0 
    

    表:PersonToAccessories此表将包含一个人可以有1个或更多的字段。如果您确定这种情况永远不会发生,您可以将它与前一张表合并,并节省一些空间。尽管为了未来做准备,但最好先这样做。

    PersonAccessoryId PersonId AccesoryType AccesoryValue 
    1     1   Shirt   1 
    2     2   Shirt   2 
    3     2   Shirt   5 
    4     2   Pant   1 
    5     3   Shirt   2 
    

    行2和行3显示人2有两件衬衫。所以当你从Person 2查询这个表格中的所有饰品时,你会得到2件衬衫和1件裤子。

    就像我说的,你将需要另一个表(或XML),您可以比较有什么ShirtType == 1代表等。

    相关问题