有没有人有任何教学关系数据库和SQL的好方案?我可以找到的所有示例都是微不足道的或具有不可能的域约束(如全名是唯一的).
我特别想找到一些标准化的好例子:不能立即适合3NF和BCNF的表格.目前我正在为每个级别使用不同的问题.
当然,我也喜欢设计糟糕的数据库的好例子,但是在掌握了基础知识之前,它会有点分散注意力.
谢谢,一些很好的例子.我已经将学生/班级标记为答案,因为我认为这是迄今为止最好的,但如果有人想要贡献更多,请做.
我有活动和照片,然后评论两者.现在,我有两个评论表,一个用于与事件相关的评论,另一个用于照片评论.架构与此类似:
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) 我正在设计一个数据库,我想规范化数据库.在一个查询中,我将加入大约30-40个表.如果它变得非常受欢迎,这会损害网站性能吗?这将是主要查询,它将在50%的时间内被调用.我将加入关于两个表的其他查询.
我现在可以选择标准化或不标准化,但如果标准化将来成为问题,我可能需要重写40%的软件,这可能需要很长时间.在这种情况下,规范化真的会受到伤害吗 在我有空的时候,我应该现在正常化吗?
c# performance normalization denormalization sql-server-2008
我最近了解了我的信息学课程中的规范化,并且我正在开发一个使用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查询.
如果我在加载时使用了额外的表格,我将不得不:
保存时:
如果我将所有玩家数据保存在一个表中:
我现在应该怎么做?
我的论点和情况是否有理由反对正常化?
您对数据库规范化的步骤和准则是什么?如果给一群具有良好计算机和逻辑技能的人,你如何向他们解释如何规范数据库设计?获取属性列表(字段)并将该列表转换为1NF数据库的思考过程是什么?2NF?3NF?
我有一张约1,000条记录的表格.其中大约一半将使用包含某些特征的一组字段.大约有10个相关领域.另一半记录不需要填写这些信息.
该表是数据库的核心,将占用大部分操作.虽然只有大约1,000条记录,但并不多.
存储数据库的硬件既旧又慢(旋转硬盘而不是SSD ......)所以我希望有一个相当优化的结构来充分利用它.显然,由于空白字段而单独增加数据库的大小并不是一个主要问题,但如果它减慢了查询的速度,那么这并不好.
我想我应该描述一下设置.目前Access 2007客户端和Access后端,虽然后端将很快转移到SQL服务器.目前后端位于主服务器机架上,但当移动到SQL Server时,它将获得自己的旧服务器机架.
那么我应该创建一个单独的表来存储上述特征集,还是应该保留原样?
database ms-access database-design ms-access-2007 normalization
注意:这个问题已于11/19/12重新定义,以供澄清.我通常在这里没有太多问题,但努力为客户端站点设计新的产品系统.我们提供一套产品,每个客户都可以向他的客户销售.我们可能会随时添加新产品,但它们都遵循以下格式:
使用之前的结构给出一个真实世界的例子:
上面的列表显然仍在继续,可以更大,更大,但它提供了整体的想法.
目前,我正在存储特定客户可以在单个平面格式表中销售的产品类型,如下所示:
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) 我有一个填充了规范化地址的客户数据库.有重复.
每个用户都创建了自己的记录,并输入了自己的地址.因此,我们在用户和地址之间建立了一对一的关系:
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) 假设我有一个N大小的矩阵,n_i x n_o我想逐行标准化,即每行的总和应为1.我怎么能在theano做到这一点?
动机:使用softmax为我返回错误,所以我尝试通过实现我自己的softmax版本来回避它.
normalization ×10
sql ×3
database ×2
mysql ×2
c# ×1
matrix ×1
ms-access ×1
performance ×1
php ×1
python ×1
scenarios ×1
sql-server ×1
theano ×1
theory ×1