AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[rdbms](dba)

Martin Hope
Trozdol
Asked: 2022-07-26 17:02:57 +0800 CST

一般来说,如果您要索引所有列,这与索引没有列相同吗?

  • 0

标题可能总结了我的问题,但要明确的是,我特别考虑的是 RDB。

我无意这样做,我只是很好奇,并且在尝试谷歌搜索时没有找到明确的答案。

如果它是或不是真的,可以解释原因吗?(如果不是太大的要求)

感谢任何愿意分享对此的见解的人。

index rdbms
  • 1 个回答
  • 33 Views
Martin Hope
DrkDeveloper
Asked: 2021-12-06 18:59:50 +0800 CST

存储多个地址并选择一个作为主要/主要地址的正确方法

  • 0

我正在使用一个小模型,并且正在为一个简单的问题而苦苦挣扎。

我应该如何存储地址/邮件/电话列表并选择一个作为委托人?

我现在想的例子。

地址实体:

  • ID
  • 布拉布拉领域

个人实体:

  • ID
  • Bla bla bla 名字和生日等...
  • 地址列表(多对多到地址,因为一个地址可以在家庭成员中共享)
  • 主要地址(FK - 地址)

这是我在 EF Core 中创建的实体:

public class Person
{
    public Person()
    {
        Addresses = new HashSet<Address>();
        PhoneNumbers = new HashSet<PhoneNumber>();
        Emails = new HashSet<Email>();
    }

    [StringLength(100)]
    public string Firstname { get; set; } = null!;

    [StringLength(300)]
    public string Lastname { get; set; } = null!;

    public Gender Gender { get; set; }

    public DateTime BirthDate { get; set; }

    public Guid? MainAddressId { get; set; }

    public Address MainAddress { get; set; } = null!;

    public virtual ICollection<Address> Addresses { get; internal set; }
}

但这对我来说看起来很脏。

sql-server rdbms
  • 1 个回答
  • 41 Views
Martin Hope
Fakipo
Asked: 2021-06-23 03:54:53 +0800 CST

使用子查询是否比在 MySQL 中使用 Limit offset 和 order by 更有效?

  • 3

例如,我们有一个问题是要找到表中薪水第二高的员工。这是我的桌子

id  name    dept    salary
1   Ram     HR      10000
2   Amrit   MRKT    20000
3   Ravi    HR      30000
4   Nitin   MRKT    40000
5   Varun   IT      50000

然后我会写一个这样的子查询。

select e_name,salary from employee
    where salary = (select max(salary) from employee
                    where salary <> (select max(salary) from employee));

我会像这样使用限制和偏移:

select e_name, salary from employee order by salary desc limit 1 offset 1;

以下哪项会更有效率?为什么?

mysql rdbms
  • 1 个回答
  • 278 Views
Martin Hope
vvs14
Asked: 2021-05-01 04:04:35 +0800 CST

关系数据库中的不一致

  • 4

当使用术语一致性时,我通常会感到困惑。NoSQL 教程总是指读取,而关系教程指的是一致状态(确保引用完整性约束)

当数据分布在多个服务器上时(例如 1 主 - n 从配置)

  1. 关系数据库是否确保读取的一致性?我的意思是提交的写入可以立即被其他事务读取?我怀疑没有给定网络,使关系数据库成为最终一致的数据库。
  2. 关系数据库是否能很好地确保参照完整性约束?
rdbms nosql
  • 3 个回答
  • 306 Views
Martin Hope
ERJAN
Asked: 2021-03-21 00:47:49 +0800 CST

如果 NoSQL 代表“Not only SQL”,那么 SQL 是 NoSQL 的子集吗?

  • 25

这个定义有点令人困惑——基本上我是在问 SQL 是否是 NoSQl 系列的一个子集:

kk

我问这个是因为“不仅”意味着 NoSQL 更大,但仍将 SQL 作为其中的一部分。

另一方面,由于我们不能在 NoSQL 数据库中执行典型的 sql 操作,例如连接,所以 SQL 不是 nosql 的一部分!

我想知道哪个是真的?

rdbms nosql
  • 4 个回答
  • 6154 Views
Martin Hope
p.vitzliputzli
Asked: 2020-12-09 11:23:30 +0800 CST

在 SQL 表中存储每日收益率曲线数据

  • 0

我有应该存储在 MSSQL 服务器中的整数到期日的收益率曲线数据。

货币.csv

目前,数据按货币存储在 CSV 文件中,格式如下:

date, 1y, 2y, 3y, ...
08/12/2020, 0.4, 0.5, 0.6, ...

我想知道桌子的最佳选择是什么。

相同格式表

当前数据可以直接转换为带有列的表:

+------------+------+------+------+------+
|    date    |  1y  |  2y  |  3y  |  ... |
+------------+------+------+------+------+
| 08/12/2020 |  0.4 |  0.5 |  0.6 |  ... |
+------------+------+------+------+------+

备用表设计

但是,我也可以像这样存储它:

+------------+-----------+-----------+--------+
|    date    |  currency |  maturity |  value |
+------------+-----------+-----------+--------+
| 08/12/2020 |  "EUR"    |         1 |    0.4 |
| 08/12/2020 |  "EUR"    |         2 |    0.5 |
| 08/12/2020 |  "EUR"    |         3 |    0.6 |
+------------+-----------+-----------+--------+

显然,第二种方法将比第一种方法占用更多空间,但我会看到我不会限制到期值的优势,以防将来它应该更改为非整数值或到期有一个专栏呢。

两种桌子设计哪个更好?还有其他更适合的设计吗?

sql-server rdbms
  • 1 个回答
  • 134 Views
Martin Hope
Lennart - Slava Ukraini
Asked: 2020-10-29 14:45:35 +0800 CST

检测矛盾

  • 1

我找到了我 2011 年的一些旧笔记,并且我还重新阅读了 @lukas-eder 的优秀文章10 Cool SQL Optimisations That do not Depending the Cost Model。所以我想我会再记笔记。场景很简单Fiddle

create table emp ( 
    emp_no int not null primary key, 
    title varchar(10) not null, 
    salary int not null, 
        check (emp_no > 0), 
        check (title in ('BOSS','WORK'))
);

insert into emp with recursive t (n) as (
    values (1) 
    union all 
    select n+1 from t where n+1 < 1000
) select n, case when mod(n,10) = 0 then 'BOSS' else 'WORK' end, 
            case when mod(n,10) = 0 then 110 else 0 end + mod(n,90) 
from t;

现在,给定规则:

 (TITLE = BOSS) implies (SALARY > 100)

和

 (TITLE = WORK) implies (SALARY <= 100)

可以实现为:

-- (TITLE = BOSS) => (SALARY > 100)
alter table emp add constraint cc1 
    CHECK ( (title <> 'BOSS' OR salary > 100) );
-- (TITLE = WORK) => (SALARY <= 100)
alter table emp add constraint cc2
    CHECK ( (title <> 'WORK' OR salary <= 100) );

和查询:

select * 
from emp 
where title = 'BOSS' and salary <= 100

DBMS 能否发现矛盾,并在不接触数据的情况下返回空结果集?

Let A = ( title = ’BOSS’ ), B = ( salary > 100 )

select * from emp where (A ^ ~B)                    
select * from emp where (A ^ ~B) ^ (~A v B)           # by cc1 
select * from emp where (A ^ ~B ^ ~A) v (A ^ ~B ^ B)    
select * from emp where (FALSE ^ ~B) v (A ^ FALSE)      
select * from emp where (FALSE) v (FALSE)           
select * from emp where (FALSE)

我试过 Postgres 13(见上面的小提琴)

Seq Scan on emp  (cost=0.00..26.50 rows=2 width=46) (actual time=0.134..0.134 rows=0 loops=1)
  Filter: ((salary <= 100) AND ((title)::text = 'BOSS'::text))
  Rows Removed by Filter: 999
Planning Time: 0.312 ms
Execution Time: 0.149 ms

和 DB2 11.5.4.0:

Optimized Statement:
-------------------
SELECT 
  Q1.EMP_NO AS "EMP_NO",
  Q1.TITLE AS "TITLE",
  Q1.SALARY AS "SALARY" 
FROM 
  DB2INST1.EMP AS Q1 
WHERE 
  (Q1.SALARY <= 100) AND 
  (Q1.TITLE = 'BOSS')

Access Plan:
-----------
        Total Cost:             51.8267
        Query Degree:           1


      Rows 
     RETURN
     (   1)
      Cost 
       I/O 
       |
     90.2441 
     TBSCAN
     (   2)
     51.8267 
        4 
       |
       999 
 TABLE: DB2INST1
       EMP
       Q1

但两者都没有这样做。任何其他可以发现矛盾并采取行动的 DBMS?这当然比现实世界的问题更有趣,但仍然如此。

编辑:@federico-razzoli 在他的回答中建议的约束也不起作用:

alter table emp add constraint cc1
    check ((title = 'BOSS' and salary > 100) or 
           (title = 'WORK' AND salary <= 100));

并且相同的查询仍然会导致表访问

 Rows 
 RETURN
 (   1)
  Cost 
   I/O 
   |
 90.2441 
 TBSCAN
 (   2)
 51.8267 
    4 
   |
   999 

表:DB2INST1 EMP Q1

optimization rdbms
  • 2 个回答
  • 122 Views
Martin Hope
LaTeX2enub1336
Asked: 2020-04-23 08:14:54 +0800 CST

确保一列对复合主键的引用完整性的更好方法?

  • 0

给定第一个表

CREATE TABLE table1 (
   column1 INTEGER,
   column2 TEXT,
   PRIMARY KEY (column1, column2));

SQL 是否有一种惯用的方式来约束column3第二个表

CREATE TABLE table2 (
    column3 INTEGER,
    column4 TEXT,
    PRIMARY KEY (column3, column4));

这样column3⊆ column1?

我目前的解决方案是这个kludge:

CREATE TABLE table0 (
    column0 SERIAL PRIMARY KEY);

CREATE TABLE table1 (
   column1 INTEGER REFERENCES table0 (column0),
   column2 TEXT,
   PRIMARY KEY (column1, column2));

CREATE TABLE table2 (
    column3 INTEGER REFERENCES table0 (column0),
    column4 TEXT,
    PRIMARY KEY (column3, column4));

我学到了外键不能只引用复合主键的一个值的艰难方法:https ://stackoverflow.com/questions/3996774/foreign-key-relationship-with-composite-primary-keys-in-sql -服务器-2005。

如果这很重要,我正在使用 PostgreSQL。

编辑 (2020-04-26)

一条评论建议我添加一个具体的例子。

该表table1包含别名。多人可以被命名为“Jane Doe”,任何一个“Jane Doe”也可以被称为“Jane Smith”和“Jane1990”。每个人都由 中的数字唯一标识column1。任一列都可以有重复项,但不允许重复行。

该表table2列出了 中的人出版的书籍table1,但table1可以包括从未出版过书籍的人,等等column3⊆ column1。再次不允许重复行。

postgresql rdbms
  • 1 个回答
  • 147 Views
Martin Hope
user3198603
Asked: 2019-05-13 00:17:56 +0800 CST

MySQL块读取时间?

  • 0

我的理解是即使我需要读取单个记录select name from customer where id=1,我也需要在内存中读取完整的特定块(可以从列 ID 的索引中找到块地址)。然后 MySQL 遍历该块上的所有记录以找到该特定记录。那是对的吗 ?

我相信 MySQL 在磁盘上写入的默认块大小为 16KB(来自谷歌)。同样从谷歌上的不同来源我了解到从磁盘(HDD)读取 100MB 数据的平均时间约为 1 秒。这意味着读取块的平均寻道时间应约为 16/(100* 1000) 秒。正确的 ?

mysql rdbms
  • 1 个回答
  • 192 Views
Martin Hope
user3198603
Asked: 2019-05-04 02:18:37 +0800 CST

每个表的磁盘块?

  • 0
  1. 在 T1,插入来自 table_1,转到磁盘 block_1。
  2. 在 T2,插入表_2,它可以转到同一个磁盘 block_1(前提是 block_1 有空间)还是将为每个表创建新块?
  3. 在 T3 处,table_1 再次插入,是否可以根据可用空间进入 block_1 或 block_2?
mysql rdbms
  • 1 个回答
  • 42 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve