您是否了解如何设计SQL解决方案?
除了基本的语言语法,我正在寻找帮助我理解的东西:
我想以尽可能少的(大小/性能)成本将用户的性别存储在数据库中.
到目前为止,我想到了3个场景
我想问的原因是因为这个的答案,其提到字符是小比布尔值.
我要澄清,我使用MS SQL 2008,它DOES其实有位数据类型.
我是一名软件开发人员.我喜欢编码,但我讨厌数据库...目前,我正在创建一个网站,允许用户将实体标记为喜欢(如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, …
假设我有两张桌子:
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
我需要添加适当的index表格,需要一些帮助.
我很困惑,需要澄清几点:
我应该为non-int列使用索引吗?为什么/为什么不呢
我已经读了很多关于clustered和non-clustered指数但我仍然不能确定何时使用一个比其他.一个很好的例子可以帮助我和许多其他开发人员.
我知道我不应该为经常更新的列或表使用索引.我还应该注意什么呢?在进入测试阶段之前我怎么知道这一切都很好?
sql-server indexing database-design clustered-index non-clustered-index
在数据库中建模继承的最佳实践是什么?
权衡取舍(例如可疑性)是什么?
(我对SQL Server和.NET最感兴趣,但我也想了解其他平台如何解决这个问题.)
我们在项目中要求存储数据库中实体的所有修订(更改历史记录).目前我们有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)
有没有其他办法做这件事? …
我有一个存储产品代码的字段.代码是唯一的,但有些产品根本没有代码.我不能发明代码,因为那些是提供者代码.
这种约束在MySQL中是否可行?
我是一个存储过程和触发器的菜鸟,所以如果解决方案涉及其中一个,请耐心等待.
更新:列不是空的.这就是我无法做到这一点的原因.
我们的软件目前在MySQL上运行.所有租户的数据都存储在同一架构中.由于我们使用Ruby on Rails,我们可以轻松确定哪些数据属于哪个租户.然而,有些公司当然担心他们的数据可能会受到损害,因此我们正在评估其他解决方案.
到目前为止,我已经看到三个选项:
Multi-Schema是我最喜欢的(考虑成本).但是,创建一个新帐户并进行迁移似乎非常痛苦,因为我必须迭代所有模式并更改其表/列/定义.
问:多架构似乎被设计为每个租户的表格略有不同 - 我不希望这样.是否有任何RDBMS允许我使用多模式多租户解决方案,其中表结构在所有租户之间共享?
PS通过multi我的意思是像超多(10.000+租户).
我需要创建一个调查,其中答案存储在数据库中.我只是想知道在数据库中实现这个的最佳方法是什么,特别是所需的表.调查包含不同类型的问题.例如:注释的文本字段,多项选择题以及可能包含多个答案的问题(即检查所有适用的答案).
我想出了两个可能的解决方案:
创建一个包含每个调查提交答案的巨型表格.每列将对应于调查的答案.即SurveyID,Answer1,Answer2,Answer3
我不认为这是最好的方法,因为在这项调查中有很多问题,如果调查要改变,似乎不是很灵活.
我想到的另一件事是创建一个问题表和答案表.问题表将包含调查的所有问题.答案表将包含调查中的各个答案,每行都与一个问题相关联.
一个简单的例子:
tblSurvey:SurveyID
tblQuestion:QuestionID,SurveyID,QuestionType,Question
tblAnswer:AnswerID,UserID,QuestionID,Answer
tblUser:UserID,UserName
我的问题是,可能有大量的答案会使答案表变得非常庞大.在性能方面,我不确定它是如此之大.
我很感激任何想法和建议.
database-design ×10
sql ×6
database ×4
mysql ×3
sql-server ×2
.net ×1
constraints ×1
indexing ×1
inheritance ×1
multi-tenant ×1
oop ×1
scalability ×1
versioning ×1