假设我提供用户检查她说的语言并将其存储在数据库中.重要的一点是,我不会搜索db中的任何值,因为我将有一些单独的搜索引擎用于搜索.现在,存储这些值的显而易见的方法是创建一个表格
UserLanguages
(
UserID nvarchar(50),
LookupLanguageID int
)
Run Code Online (Sandbox Code Playgroud)
但该网站将是高负荷,我们正试图消除任何可能的开销,所以为了避免在UI上显示结果时与主成员表的连接,我想在主表中为用户存储语言,拥有它们逗号分隔,如"12,34,65"
同样,我不搜索它们,所以我不担心必须在该列上进行全文索引.
我真的没有看到这个解决方案的任何问题,但我忽略了什么?
谢谢,安德烈
假设TABLE-A在TABLE-B中可以有一行或多行,它们可以在TABLE-C中有一行或多行,它们可以在TABLE-D中有一行或多行......依此类推.
假设我在TABLE-Z并且需要知道有关TABLE-A的详细信息.我是否从TABLE-Z一直到TABLE-A进行SQL查询?在某些时候,如果说TABLE-Z有一个FK到TABLE-A那么也许会很好,所以查询不会那么痛苦.但是,如果我把那个FK,我想我会破坏正常化,对吧?
关于如何处理这个问题的一般建议?
mysql database-design normalization denormalization denormalized
我正在寻找一种策略,以阻止分支表的重复问题.例如,作为一个虚构的用例,假设我有一个用户表,其中包含他们的姓名,登录名,密码和其他元数据.在这种特定情况下,假设用户被限制为按照特定的IP子集登录.因此,我们有1:M的关系.每次出现如下用例时,您的正常工作流程包括具有"用户"表和"user_ips"等表格,在这种情况下,您将拥有诸如pk(ip_id),fk之类的内容( user_id)和user_ips侧的IP.
对于类似的情况,你们这些人通常会像上面那样流行吗?有机会在这里有效地反规范化吗?也许以某种CSV分隔的方式将IP存储在BLOB列中?您今天正在部署的策略有哪些?
我试图找出一个脚本来获取MySQL查询并将其转换为单独的查询,即动态地对查询进行非规范化.
作为一个测试我构建了一个简单的文章系统,有4个表:
一篇文章可以在多个类别中,但只有一种格式.我觉得这是现实生活中的一个很好的例子.
在列出所有文章的类别页面上(同时提取format_title),可以使用以下查询轻松实现:
SELECT articles.*, formats.format_title
FROM articles
INNER JOIN formats ON articles.article_format_id = formats.format_id
INNER JOIN article_categories ON articles.article_id = article_categories.article_id
WHERE article_categories.category_id = 2
ORDER BY articles.article_date DESC
Run Code Online (Sandbox Code Playgroud)
但是,我尝试构建的脚本将接收此查询,解析它并单独运行查询.
所以在这个类别的页面示例中,脚本将有效地运行它(动态计算):
// Select article_categories
$sql = "SELECT * FROM article_categories WHERE category_id = 2";
$query = mysql_query($sql);
while ($row_article_categories = mysql_fetch_array($query, MYSQL_ASSOC)) {
// Select articles
$sql2 = "SELECT * FROM articles WHERE …Run Code Online (Sandbox Code Playgroud) 我有一个db denormalization的设计问题.
我正在建立一个相对较大的数据库,需要尽可能地优化它.
这是一个非常简化的问题模型.
图片中的所有表都是链接的,并且使用规范化的数据库来获取来自特定国家/地区的所有用户,我必须加入所有表.那是cca 250个国家x cca 12000个城市x cca 625000个地区x?地址x?用户......简而言之,这是很多加入,这需要很长时间.
我想要做的是country_id在user表中创建冗余,这样我就可以在没有任何连接的情况下获得相同的查询.
问题是,在这种模型中保持一致性的最佳做法是什么(顺便说一句,使用MySql)?
一种方法,也许最快的方法是在插入/更新/删除数据时确保应用程序级别的一致性.
其他是存储过程,我真的看不出任何优点.只有直接调用它们才能确保一致性.如果您想在没有程序的情况下进行一些更改,则一致性会中断.
我一直在研究触发器...不确定如何实现它,以及我将在性能上获得多少.
无论如何,最好确保数据库级别的一致性.
有什么建议?

我继承了数据对象(例如,User,Employee,Manager等).我们使用自编的ORM来管理MySql数据库中的数据.如何存储数据更好:
标准化格式划分为以1对1关系链接的不同MySql表(并使用多个连接来管理数据);
或者在一个phisycal表中使用非规范化方法,在每个特定情况下都有大量未使用的字段.
先感谢您
我有一个表的列created_time(日期时间)和foreign_key我需要检索所有的行xforeign_key与创建的最后一排xforeign_key是让说,在2分钟(和检索所有与该日行)
我的问题:什么对性能有好处,每次创建一行时添加一个存储最后一行创建日期的列,或者使用更复杂的查询来检索最后一行加入的那些行?
我使用此R代码将数据标准化为最小值和最大值:
normalize <- function(x) {
return ((x - min(x)) / (max(x) - min(x)))
}
mydata <- as.data.frame(lapply(mydata , normalize))
Run Code Online (Sandbox Code Playgroud)
如何对数据进行非规范化?
因为我在Django中很新,所以我在这里要求对Django中进行非规范化的最佳实践提出一些建议.按照我的意见,我正在考虑做这样的事情:
我有2个型号:
类别:
name = m.CharField(max_length = 127)
Run Code Online (Sandbox Code Playgroud)
文章:
name = m.CharField(max_length = 127)
category = m.ForeignKey(Category)
category_name = m.CharField(max_length = 127)
Run Code Online (Sandbox Code Playgroud)
我希望这发生:
当我更改任何类别的名称以反映所有文章中的更改时.现在,当我们没有一个或两个字段但大约10-20个字段保持同步时,最佳做法是什么?
谢谢你的帮助 (:
我刚刚阅读了Firebase博客文章标题为Denormalizing Your Data Is Normal,我要求澄清.
在考虑因素段落之前,我一直在使用它.具体来说,以下内容:
"评论的修改很简单:只需将/ comments下的评论值设置为新内容.要删除,只需删除/ comments中的评论 - 以及每当您在代码中的其他地方遇到不存在的评论ID时在/ comments中,您可以假设它已被删除并正常进行"
对于修改,为什么我不必修改/ links和/ users下存储的重复注释?
对于删除,我是否正确理解,一旦删除注释,我必须在所有读取逻辑中使用逻辑来交叉检查/注释以防它被删除?
谢谢!
denormalization ×10
mysql ×6
sql ×4
database ×3
consistency ×1
denormalized ×1
django ×1
dynamic-sql ×1
firebase ×1
inheritance ×1
minmax ×1
normalizing ×1
orm ×1
php ×1
r ×1