标签: normalization

教数据库设计的好例子

有没有人有任何教学关系数据库和SQL的好方案?我可以找到的所有示例都是微不足道的或具有不可能的域约束(如全名是唯一的).

我特别想找到一些标准化的好例子:不能立即适合3NF和BCNF的表格.目前我正在为每个级别使用不同的问题.

当然,我也喜欢设计糟糕的数据库的好例子,但是在掌握了基础知识之前,它会有点分散注意力.


谢谢,一些很好的例子.我已经将学生/班级标记为答案,因为我认为这是迄今为止最好的,但如果有人想要贡献更多,请做.

database-design scenarios normalization

6
推荐指数
2
解决办法
1万
查看次数

当两个表格非常相似时,它们何时合并?

我有活动和照片,然后评论两者.现在,我有两个评论表,一个用于与事件相关的评论,另一个用于照片评论.架构与此类似:

CREATE TABLE EventComments
(
  CommentId int,
  EventId int,
  Comment NVarChar(250),
  DateSubmitted datetime
)

CREATE TABLE PhotoComments
(
  CommentId int,
  PhotoId int,
  Comment NVarChar(250),
  DateSubmitted datetime
)
Run Code Online (Sandbox Code Playgroud)

我的问题是我是否应该将它们组合起来,并添加一个单独的交叉引用表,但我想不出有办法正确地做到这一点.我觉得这应该没事,你有什么想法?

编辑

根据沃尔特的回答(以及一些轻读),我想出了这个:

CREATE TABLE Comments
(
  CommentId int,
  Comment NVarChar(250),
  DateSubmitted datetime
  CONTRAINT [PK_Comments] PRIMARY KEY
  (
    CommentId
  )
)

CREATE TABLE EventComments
(
  CommentId int,
  EventId int
)

CREAT TABLE PhotoComments
(
  CommentId int,
  PhotoId int
)

ALTER TABLE EventComments ADD CONSTRAINT FK_EventComments FOREIGN KEY (CommentId) REFERENCES Comments(CommentId)

ALTER TABLE PhotoComments …
Run Code Online (Sandbox Code Playgroud)

sql-server database-design data-modeling normalization

6
推荐指数
1
解决办法
509
查看次数

工具或网站,以帮助数据库规范化

是否有任何工具或在线资源(FREX教程)可以帮助新手进行数据库规范化?

sql normalization

6
推荐指数
3
解决办法
2万
查看次数

规范化是否真的会损害高流量网站的性能?

我正在设计一个数据库,我想规范化数据库.在一个查询中,我将加入大约30-40个表.如果它变得非常受欢迎,这会损害网站性能吗?这将是主要查询,它将在50%的时间内被调用.我将加入关于两个表的其他查询.

我现在可以选择标准化或不标准化,但如果标准化将来成为问题,我可能需要重写40%的软件,这可能需要很长时间.在这种情况下,规范化真的会受到伤害吗 在我有空的时候,我应该现在正常化吗?

c# performance normalization denormalization sql-server-2008

6
推荐指数
1
解决办法
774
查看次数

不在此数据库中使用规范化表是不是很糟糕?

我最近了解了我的信息学课程中的规范化,并且我正在开发一个使用SQLite作为后端数据库的多人游戏.

有关它的一些信息:

简化的结构看起来有点像下面这样:

 player_id |  level | exp  | money | inventory
---------------------------------------------------------
    1      |    3   | 120  | 400   | {item a; item b; item c}
Run Code Online (Sandbox Code Playgroud)

好的.如您所见,我将以字符串形式将表/数组存储在"inventory"列中.这违反了规范化.

但问题是:为玩家的库存制作额外的桌子对我来说只是一个缺点!

  • 我访问数据库的唯一点是:
    • 当玩家加入游戏并加载他的个人资料时
    • 保存球员的个人资料时

当玩家加入时,我从数据库加载他的数据并将其存储在内存中.保存播放器时,我每隔五分钟就会写一次DB.所以我的脚本中实际上只有很少的SQL查询.

如果我在加载时使用了额外的表格,我将不得不:

  • 执行性能和可能更多数据密集型查询以从库存表中获取属于玩家X的所有项目
  • 浏览结果并将其转换为表格以便存储在内存中

保存时:

  • 从库存表中删除属于玩家X的所有物品(玩家可能已经丢弃/出售了一些物品?)
  • 浏览表格并对玩家拥有的每个项目执行查询

如果我将所有玩家数据保存在一个表中:

  • 我只有一个用于保存和加载的查询
  • 一切都会在一个地方
  • 在我的脚本中,我只需要在加载和保存时(de)序列化表

我现在应该怎么做?

我的论点和情况是否有理由反对正常化?

sql database theory normalization

6
推荐指数
2
解决办法
507
查看次数

你如何教数据库规范化?

您对数据库规范化的步骤和准则是什么?如果给一群具有良好计算机和逻辑技能的人,你如何向他们解释如何规范数据库设计?获取属性列表(字段)并将该列表转换为1NF数据库的思考过程是什么?2NF?3NF?

database-design normalization

6
推荐指数
0
解决办法
5584
查看次数

我应该将可选记录属性放在单独的表中吗?

我有一张约1,000条记录的表格.其中大约一半将使用包含某些特征的一组字段.大约有10个相关领​​域.另一半记录不需要填写这些信息.

该表是数据库的核心,将占用大部分操作.虽然只有大约1,000条记录,但并不多.

存储数据库的硬件既旧又慢(旋转硬盘而不是SSD ......)所以我希望有一个相当优化的结构来充分利用它.显然,由于空白字段而单独增加数据库的大小并不是一个主要问题,但如果它减慢了查询的速度,那么这并不好.

我想我应该描述一下设置.目前Access 2007客户端和Access后端,虽然后端将很快转移到SQL服务器.目前后端位于主服务器机架上,但当移动到SQL Server时,它将获得自己的旧服务器机架.

那么我应该创建一个单独的表来存储上述特征集,还是应该保留原样?

database ms-access database-design ms-access-2007 normalization

6
推荐指数
1
解决办法
1612
查看次数

MySQL表设计和规范化帮助

注意:这个问题已于11/19/12重新定义,以供澄清.我通常在这里没有太多问题,但努力为客户端站点设计新的产品系统.我们提供一套产品,每个客户都可以向他的客户销售.我们可能会随时添加新产品,但它们都遵循以下格式:

  1. 类别
  2. 类型
  3. 产品

使用之前的结构给出一个真实世界的例子:

  • 棒球设备
    • 手套
      • 罗林斯
      • 耐克
      • Mizzuno
    • 蝙蝠
      • 伊斯顿
      • Louisville Slugger
  • 足球装备
    • 鞋
      • 耐克
      • 锐步
      • 阿迪达斯
    • 橄榄球
      • 耐克
      • Saplding
      • 威尔逊
  • ....

上面的列表显然仍在继续,可以更大,更大,但它提供了整体的想法.

目前,我正在存储特定客户可以在单个平面格式表中销售的产品类型,如下所示:

ID  | clientID | categoryID | typeID | productID | customURL
=============================================================
1   |  111     |    1       |   1    |   1       | 1111
2   |  111     |    1       |   2    |   2       | 2222
3   |  111     |    1       |   2    |   3       | 3333
4   |  111     |    2       |   3    |   4 …
Run Code Online (Sandbox Code Playgroud)

mysql database-design normalization

6
推荐指数
1
解决办法
548
查看次数

MySQL:在不破坏外键约束的情况下消除重复行

我有一个填充了规范化地址的客户数据库.有重复.

每个用户都创建了自己的记录,并输入了自己的地址.因此,我们在用户和地址之间建立了一对一的关系:

CREATE TABLE `users` (
  `UserID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `Name` VARCHAR(63),
  `Email` VARCHAR(63),
  `AddressID` INT UNSIGNED,
  PRIMARY KEY (`UserID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `addresses` (
  `AddressID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `Duplicate` VARCHAR(1),
  `Address1` VARCHAR(63) DEFAULT NULL,
  `Address2` VARCHAR(63) DEFAULT NULL,
  `City` VARCHAR(63) DEFAULT NULL,
  `State` VARCHAR(2) DEFAULT NULL,
  `ZIP` VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (`AddressID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
Run Code Online (Sandbox Code Playgroud)

而数据:

INSERT INTO `users` VALUES
    (1,  'Michael', 'michael@email.com', 1),
    (2,  'Steve',   'steve@email.com',   2), …
Run Code Online (Sandbox Code Playgroud)

php mysql sql normalization duplicate-removal

6
推荐指数
1
解决办法
1106
查看次数

在theano中逐行标准化矩阵

假设我有一个N大小的矩阵,n_i x n_o我想逐行标准化,即每行的总和应为1.我怎么能在theano做到这一点?

动机:使用softmax为我返回错误,所以我尝试通过实现我自己的softmax版本来回避它.

python normalization matrix theano

6
推荐指数
1
解决办法
4145
查看次数