Sql 数据库设计,用于优化访问
我直接进入问题,目前我有一张这样的表格Sql 数据库设计,用于优化访问,sql,Sql,我直接进入问题,目前我有一张这样的表格 id | model | CategoryId | etc... 现在我的新要求是支持多个类别。所以我有两种可能的解决方案,但我想知道这两种设计可能会产生的问题。我还知道我最多可以有6个类别,而且我不能创建链接器表来将产品链接到类别 在第一个设计中,我只需创建列CategoryN id | model | CategoryId1 | CategoryId2 | CategoryId3 | CategoryId4 | etc... 但这会让质疑变得可怕
id | model | CategoryId | etc...
现在我的新要求是支持多个类别。所以我有两种可能的解决方案,但我想知道这两种设计可能会产生的问题。我还知道我最多可以有6个类别,而且我不能创建链接器表来将产品链接到类别
在第一个设计中,我只需创建列CategoryN
id | model | CategoryId1 | CategoryId2 | CategoryId3 | CategoryId4 | etc...
但这会让质疑变得可怕
id | model | CategoryId | etc...
我的第二种方法是简单地为N个类别添加产品
id | model | CategoryId | etc...
1 | ABC | 1 | etc...
2 | ABC | 2 | etc...
3 | ABC | 3 | etc...
我认为查询会更简洁,但不一定更简单。
另一个方面是,我正在研究查询的性能,第一种方法似乎会更好。
我希望这足够清楚
感谢您的建议。第三个选项是多对多表,用于将模型链接到类别: 模型类别
- 型号id(主键,外键到
表)model
- 类别id(主键,类别的外键表)
model_id category_id
----------------------
1 1
1 2
1 3
这意味着模型表中不需要类别id列。第三个选项是多对多表,用于将模型链接到类别: 模型类别
- 型号id(主键,外键到
表)model
- 类别id(主键,类别的外键表)
model_id category_id
----------------------
1 1
1 2
1 3
这意味着模型表中不需要category_id列。我想您需要的是一个
基本上,您有一个model\u to\u categories表,该表将model id与category id进行匹配。我想您需要的是一个
基本上,您有一个model_to_categories表,它将model id与category id进行匹配。您能将CategoryID值位字段设置为“flags”吗 如果是这样,您可以通过使用现有的单CategoryID字段来保持高性能,通过不添加一堆新列来保持查询的简单性,并且随着时间的推移,每个产品最多有32个类别(假设CategoryID为int) 因此,您的CategoryID值为:
id | model | CategoryId | etc...
1 | ABC | 1 | etc...
2 | ABC | 2 | etc...
3 | ABC | 4 | etc...
3 | ABC | 8 | etc...
您将在CategoryID列中存储所有CategoryID的总数(为了向后兼容),然后必须测试字段的值,以确定是否“设置”了特定类别。顺便说一句,您也可以在查询中直接这样做
这不是“最佳实践”,它确实需要一个全新的表和大量的加入,但如果您正在寻找一种方法,使其中的某些内容起作用,则位字段标志将起作用。您能将CategoryID值位字段设为“标志”吗 如果是这样,您可以通过使用现有的单CategoryID字段来保持高性能,通过不添加一堆新列来保持查询的简单性,并且随着时间的推移,每个产品最多有32个类别(假设CategoryID为int) 因此,您的CategoryID值为:
id | model | CategoryId | etc...
1 | ABC | 1 | etc...
2 | ABC | 2 | etc...
3 | ABC | 4 | etc...
3 | ABC | 8 | etc...
您将在CategoryID列中存储所有CategoryID的总数(为了向后兼容),然后必须测试字段的值,以确定是否“设置”了特定类别。顺便说一句,您也可以在查询中直接这样做
这不是“最佳实践”,它需要一个全新的表和大量的加入,但如果您正在寻找一种方法,使其中的某些内容起作用,则位字段标志将起作用。我忘了说categoryid是Guid,所以我真的不能使用这种方法。如果你想查询它的话,它是如何工作的?我忘了说categoryid是一个Guid,所以我真的不能使用这种方法。如果您想查询它,这将如何工作?我希望使用这种方法,但我不能向数据库添加任何新表。我想我的问题本来就是这样的。谢谢。@Greg:当然可以。和DBA(角落里那个沉默寡言的家伙)谈谈。他和你一样渴望创建一些有用的东西。我很想使用这种方法,但我不能向数据库中添加任何新表。我想我的问题本来就是这样的。谢谢。@Greg:当然可以。和DBA(角落里那个沉默寡言的家伙)谈谈。他和你一样渴望创造一些有用的东西。