小编por*_*ton的帖子

在 SQL 中实现一对零或一关系

假设我正在为存在一对零或一 (1-0..1) 关系的场景设计数据库。例如:

  • 有一组用户有些 用户也可能是客户

因此,我创建了两个对应的表,userscustomers,但是……

…在给定的 SQL 平台中表示和实现这种情况的最佳方法是什么?我考虑了两种可能的解决方案:

  1. 在里面 users表中,添加customer可能是 FOREIGN KEY 引用customersNULL标记的列。

  2. customers表中,包括一个userUNIQUE指向users表格列(设置有约束)。

我已经在一些论坛上问过类似的问题,但答案基本上是“你需要什么”,“你觉得方便什么”。我不喜欢这种回答。我想要一个严肃的 DB 理论,一个有根据的答案。我在哪里可以读到 1-0..1 关系?

foreign-key database-design

12
推荐指数
1
解决办法
8387
查看次数

需要两个索引吗?

我们的 MySQL 数据库将包含一个百科全书。百科全书将显示在每个页面都包含从一个字母开始的条目的页面中。

我应该使用哪些索引?我应该为字段“标题”设置两个索引(一个长度为 255 的索引用于排序,一个长度为 1 的索引用于按第一个字母进行索引)?

创建表`cyclopedy`(
  `id` int(10) unsigned NOT NULL auto_increment,
  `title` varchar(255) 整理 utf8_bin NOT NULL,
  `article` mediumtext collat​​e utf8_bin NOT NULL,
  主键(`id`),
  KEY `title` (`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

好吧,现在我明白长度 1 不足以按第一个字母进行索引,因为 UTF-8 字母可能由三个字节组成。

mysql innodb index index-tuning sorting

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

将空字符串分配给 MySQL 中的 INT NULL 字段

给我一个参考,如果将空字符串 ( '') 分配给一个INT NULL字段会发生什么。

它变成NULL0吗?

MySQL的所有版本(从5开始)都做同样的事情吗?

mysql datatypes type-conversion

4
推荐指数
1
解决办法
9503
查看次数

获取周/月数据

有一个表(MySQL)。

它的简化结构:

日期
val INT 未签名

我需要平均值val

  • 每周包含表中的日期;
  • 每个月都包含表中的日期。

什么是最简单的方法来做到这一点?

mysql

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

低基数列索引和 SELECT

假设一个长(例如 1000000 个条目)MySQL 表的t一列c包含少于 10 个不同的 TINYINT 值。

还假设这些值中的大多数(例如 99% 甚至 99.9%)都等于 0。

在此列上添加索引是否会加快如下查询的速度?

SELECT * FROM t WHERE c > 1
Run Code Online (Sandbox Code Playgroud)

mysql index cardinality-estimates

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

如何用 UNIQUE 索引和外键表示它?

“组”是一群学生。“话题”是课程的话题。

每个组对应一个主题。(因此每个主题可能有多个组。)

一个学生对应多个组,但每个主题最多一个组。

如何根据 MySQL 中的 UNIQUE 索引和外键实现这一点?

foreign-key database-design

0
推荐指数
1
解决办法
337
查看次数