标签: database-design

SQL数据库设计的初学者指南

您是否了解如何设计SQL解决方案?

除了基本的语言语法,我正在寻找帮助我理解的东西:

  1. 要构建哪些表以及如何链接它们
  2. 如何设计不同规模(小客户端APP到庞大的分布式网站)
  3. 如何编写有效/高效/优雅的SQL查询

sql database database-design scalability

127
推荐指数
5
解决办法
15万
查看次数

在数据库中存储性别(性别)

我想以尽可能少的(大小/性能)成本将用户的性别存储在数据库中.

到目前为止,我想到了3个场景

  1. INT - 在代码与枚举对齐(1 =男,2 =女性,3 = ...)
  2. char(1) - 存储m,f或其他单个字符标识符
  3. (布尔值) - 此选项是否有适当的字段名称?

我想问的原因是因为这个的答案,其提到字符布尔值.

我要澄清,我使用MS SQL 2008,它DOES其实有位数据类型.

sql database-design

127
推荐指数
3
解决办法
10万
查看次数

在数据库中实现评论和喜欢

我是一名软件开发人员.我喜欢编码,但我讨厌数据库...目前,我正在创建一个网站,允许用户将实体标记为喜欢(如FB),标记评论.

我被困在数据库表设计上来处理这个功能.解决方案是微不足道的,如果我们只能为一种类型的东西(例如照片)做到这一点.但我需要为5种不同的东西启用它(现在,但我也假设随着整个服务的增长,这个数字会增长).

我在这里发现了一些类似的问题,但没有一个问题得到满意的答案,所以我再次提出这个问题.

问题是,如何正确,高效弹性地设计数据库,以便它可以存储不同表的注释,喜欢不同的标签.一些设计模式作为答案将是最好的;)

详细描述:我有一个 User与一些用户数据,以及3个:Photo照片,Articles文章,Places的地方.我想启用任何已登录的用户:

  • 评论这3个表中的任何一个

  • 将其中任何一个标记为喜欢

  • 使用某个标记标记其中任何一个

  • 我还想计算每个元素的喜欢次数以及使用特定标记的次数.

1 的做法:

a)对于标签,我将创建一个 Tag [TagId, tagName, tagCounter],然后我会创造很多一对多的关系为:Photo_has_tags,Place_has_tag,Article_has_tag.

b)同样重要的评论.

三)我将创建一个 LikedPhotos [idUser, idPhoto],LikedArticles[idUser, idArticle],LikedPlace [idUser, …

mysql database database-design design-patterns

127
推荐指数
3
解决办法
7万
查看次数

我应该如何命名将两个表一起映射的表?

假设我有两张桌子:

Table: Color
Columns: Id, ColorName, ColorCode

Table: Shape
Columns: Id, ShapeName, VertexList
Run Code Online (Sandbox Code Playgroud)

我该怎么称呼将颜色映射到形状的表格?

Table: ???
Columns: ColorId, ShapeId
Run Code Online (Sandbox Code Playgroud)

sql database database-design data-modeling naming-conventions

126
推荐指数
10
解决办法
6万
查看次数

聚簇索引和非聚簇索引之间的区别

我需要添加适当的index表格,需要一些帮助.

我很困惑,需要澄清几点:

  • 我应该为non-int列使用索引吗?为什么/为什么不呢

  • 我已经读了很多关于clusterednon-clustered指数但我仍然不能确定何时使用一个比其他.一个很好的例子可以帮助我和许多其他开发人员.

我知道我不应该为经常更新的列或表使用索引.我还应该注意什么呢?在进入测试阶段之前我怎么知道这一切都很好?

sql-server indexing database-design clustered-index non-clustered-index

126
推荐指数
4
解决办法
28万
查看次数

你如何有效地模拟数据库中的继承?

在数据库中建模继承的最佳实践是什么?

权衡取舍(例如可疑性)是什么?

(我对SQL Server和.NET最感兴趣,但我也想了解其他平台如何解决这个问题.)

.net sql-server oop inheritance database-design

124
推荐指数
5
解决办法
5万
查看次数

数据库设计修订?

我们在项目中要求存储数据库中实体的所有修订(更改历史记录).目前我们有2个设计方案:

例如,对于"员工"实体

设计1:

-- Holds Employee Entity
"Employees (EmployeeId, FirstName, LastName, DepartmentId, .., ..)"

-- Holds the Employee Revisions in Xml. The RevisionXML will contain
-- all data of that particular EmployeeId
"EmployeeHistories (EmployeeId, DateModified, RevisionXML)"
Run Code Online (Sandbox Code Playgroud)

设计2:

-- Holds Employee Entity
"Employees (EmployeeId, FirstName, LastName, DepartmentId, .., ..)"

-- In this approach we have basically duplicated all the fields on Employees 
-- in the EmployeeHistories and storing the revision data.
"EmployeeHistories (EmployeeId, RevisionId, DateModified, FirstName, 
      LastName, DepartmentId, .., ..)"
Run Code Online (Sandbox Code Playgroud)

有没有其他办法做这件事? …

sql database versioning database-design

123
推荐指数
8
解决办法
3万
查看次数

允许MySQL中为空值的唯一约束

我有一个存储产品代码的字段.代码是唯一的,但有些产品根本没有代码.我不能发明代码,因为那些是提供者代码.

这种约束在MySQL中是否可行?

我是一个存储过程和触发器的菜鸟,所以如果解决方案涉及其中一个,请耐心等待.

更新:列不是空的.这就是我无法做到这一点的原因.

mysql database-design constraints

122
推荐指数
3
解决办法
5万
查看次数

如何使用共享表结构创建多租户数据库?

我们的软件目前在MySQL上运行.所有租户的数据都存储在同一架构中.由于我们使用Ruby on Rails,我们可以轻松确定哪些数据属于哪个租户.然而,有些公司当然担心他们的数据可能会受到损害,因此我们正在评估其他解决方案.

到目前为止,我已经看到三个选项:

  • 多数据库(每个租户都有自己的 - 几乎与每个客户的1个服务器相同)
  • 多模式(MySQL中不可用,每个租户在共享数据库中获取自己的模式)
  • 共享架构(我们当前的方法,可能在每列上有额外的识别记录)

Multi-Schema是我最喜欢的(考虑成本).但是,创建一个新帐户并进行迁移似乎非常痛苦,因为我必须迭代所有模式并更改其表/列/定义.

问:多架构似乎被设计为每个租户的表格略有不同 - 我不希望这样.是否有任何RDBMS允许我使用多模式多租户解决方案,其中表结构在所有租户之间共享?

PS通过multi我的意思是像超多(10.000+租户).

mysql sql database-design multi-tenant

122
推荐指数
4
解决办法
6万
查看次数

调查的数据库设计

我需要创建一个调查,其中答案存储在数据库中.我只是想知道在数据库中实现这个的最佳方法是什么,特别是所需的表.调查包含不同类型的问题.例如:注释的文本字段,多项选择题以及可能包含多个答案的问题(即检查所有适用的答案).

我想出了两个可能的解决方案:

  1. 创建一个包含每个调查提交答案的巨型表格.每列将对应于调查的答案.即SurveyID,Answer1,Answer2,Answer3

    我不认为这是最好的方法,因为在这项调查中有很多问题,如果调查要改变,似乎不是很灵活.

  2. 我想到的另一件事是创建一个问题表和答案表.问题表将包含调查的所有问题.答案表将包含调查中的各个答案,每行都与一个问题相关联.

    一个简单的例子:

    tblSurvey:SurveyID

    tblQuestion:QuestionID,SurveyID,QuestionType,Question

    tblAnswer:AnswerID,UserID,QuestionID,Answer

    tblUser:UserID,UserName

    我的问题是,可能有大量的答案会使答案表变得非常庞大.在性能方面,我不确定它是如此之大.

我很感激任何想法和建议.

sql database-design

120
推荐指数
3
解决办法
9万
查看次数