首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库表结构

数据库表结构
EN

Stack Overflow用户
提问于 2012-01-04 14:55:52
回答 4查看 123关注 0票数 1

我对如何调整我的数据库感到有点困惑,目前我正在处理三个表:

  1. item:包含"item“的基本信息(user.id、名称、描述、feature_1(bool)、feature_2(bool) )。etc)
  2. Feature_1:包含" item“的一些可选值,因此如果用户决定对其项拥有Feature1,我们将在Feature_1中创建一个记录并填写这些值。1项在“none.
  3. Feature_2:”表中不能有多个记录,因此它有1条记录或与Feature_1相同的Feature_1,但具有不同的可选值,因此用户可以将Feature_1添加到他的项和/或Feature_2中。同样,每个项目可以有0或1条Feature_2记录。

我不确定这是否是最佳实践,其中一个选项是将一个表“Item”中的所有值与多个空值混合。

任何建议和建议都将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-04 15:16:06

分离出这样的值对于处理锁定问题是很有帮助的。如果您有多个正在更新的守护进程/脚本,以及这些表并在它们上持有锁,那么将所有这些值放在一个表上是一个问题。当然,既然“item”的值被分隔成三个表,那么如果/当您需要所有这些表时,您就会遇到追踪它们的问题。一般来说,把这些桌子像这样分开是可以的。

另外,在任何人沿着这样分割数据的道路前进之前,通常最好尝试/用尽以下每一项:

尽可能多地使用“with(Nolock)”,以防止可能出现的锁定问题。

修改维护此数据的脚本,以尽可能少地使用“begin”类型的事务。

修改维护数据的脚本的执行,使它们更有可能被顺序调用而不是并发调用。让他们做同样的工作。

票数 3
EN

Stack Overflow用户

发布于 2012-01-04 15:08:41

我倾向于同意这三张表。因为您说这些项只能链接到零或一个Feature_1和零或一个Feature_2,所以可以向item表中添加两个列,并引用Feature_1和Feature_2主键。您可以对这些列使用外键约束,并使其为空,以指示不存在该特性。这也意味着您可以放弃布尔值,并保留检查类型1或类型2的特性是否可用而无需连接表的好处。

票数 2
EN

Stack Overflow用户

发布于 2012-01-04 14:59:49

纯粹主义者会说,您应该将每个功能作为单独的表,每个表都带有条目表的外键。而且,总的来说,我同意,虽然相当小的项目不会同时具有两个特性,而且功能记录的大小很小,但可能值得消除必须加入表的开销。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8728859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档