我需要帮助。我不知道创建我需要的表的正确方法是什么。我可以采用不同的方式,但我可能会以一种愚蠢的方式做到这一点。
以下是我的情况示例。
我有人。 每个人都有领域。
字段可以是:ShirtType,PantType,HairColor,EyeColor,ShoeType,Height,Weight等。 我将来需要添加其他字段。
每个人可能不会使用所有字段。 (有些人只会使用一个字段)。
我应该:
OR
第一个似乎不那么令人困惑,但第二个浪费的空间更少。 NULL字段(方法1)是浪费空间吗?糟糕的设计? 我可以轻松地将数据导入第一个方法,但第二个方法我必须添加一个值列表和字段ID,一次一个值列表。可能需要一段时间。
如果这不是很有道理,我道歉,但我真的可以使用一些建议。
感谢。
答案 0 :(得分:1)
答案 1 :(得分: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'
答案 2 :(得分:0)
如果你有一个相对较小且可知的“字段”数量 - 也就是说,你不会想到以后需要添加的更多字段 - 那么第一种方式是可以接受的。
但在其他情况下,如果您不知道有多少字段或有大量字段,或者可能添加了新字段,则只需添加另一个表。它提供了适当的关系建模和更容易的可扩展性。
编写一些代码将“平面”记录转换为正确的数据库结构以便重用,然后插入就像在单个表中一样简单。
答案 3 :(得分:0)
如果每个人每个人只有一种类型,那么你可以将它们全部放在一张桌子上。如果一个人有两个或更多相同的(即2个衬衫类型),那么你应该考虑为不同的领域设置一个表,这样你就可以做更好的搜索。
如果您需要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行显示Person 2有两件衬衫。因此,当您从Person 2查询此表中的所有附件时,您将获得2件衬衫和1件裤子。
正如我所说,你需要另一张表(或xml),你可以比较ShirtType == 1
所代表的等等。