标签: database-schema

创建一个可扩展的数据库模式来存储高尔夫球比分

我正在尝试设计一个数据库来存储我所有的朋友和我的高尔夫成绩。您可能知道,高尔夫球比分由 18 洞个人比分组成。我可以想到两种设计模式的方法:

  1. 创建一个表,每个洞都有一列(例如 h1 到 h18),该表具有引用其他表的 FK player_id、round_id 和 course_id。它有一个总列,它是 h1 到 h18 列的总和。如果我更改了一个洞分数,我将需要手动更新总列。

  2. 创建一个表,其中包含一列球洞得分、一列球洞索引、一列 player_id、course_id 和 round_id。要获得一轮的总分,我需要对 round_id、player_id 进行 SUM 查询。

目前,数据库可能会存储少于 20 人的分数,因此任何一种方法都应该没问题。但是如果我想存储 20,000 人的分数,哪种方法更具可扩展性呢?

我正在使用 MySQL 5 和 PHP5。谢谢。

更新> 查询示例: 1. 读取所有玩家在一轮中的 9/18 得分并建立记分卡。2. 基本统计数据,例如找到球员最后 X 轮的最低/平均/最高总分。3. 更高级的统计数据,如最近 X 轮任何洞的平均得分。

mysql sql database-design database-schema

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

如何设计优雅地代表ADDRESS的数据库模式?

按地址,我只指国家,州,城市,地区,街道,建筑物,

在哪里可以有效地在其他表格(例如人员)中引用该地址,以便我们可以选择同一城市等的人员​​?谢谢。

database database-design database-schema

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

如何在流星中使用带有打字稿的 mongo 模式验证?

使用 Typescript 时,是否有在 Meteor 1.3 中使用模式验证的包。Meteor 指南(aldeed:simple-schema)中的推荐包似乎没有定义文件。

那么改用什么,或者 Typescript 有一个内置的方法来做到这一点?

mongodb database-schema node.js meteor typescript

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

如何设计带有发布/草稿表的sql数据库?

我想知道如何制定博客数据库方案。作者撰写文章并将其发布在博客上。这对于像这样的表来说非常简单

作者、文章、博客

但文章也可以有草稿。读者看不到草稿,文章发表后博客的读者可以看到。已发表的文章可以取消发表,成为草稿。

如何连接

草稿

发布

包含文章和博客表的表?有必要吗?或者只是向 Article 表添加一些列?比如IsPublished之类的?

sql database postgresql publish database-schema

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

租户外键约束的 SQL 模式设计

我正在设计一个用于多租户场景的数据库。我最近了解到,为了强制相互引用的表之间的tenant_ids 保持一致,我需要让表的主键既包含表id 又包含tenant_id。然后,外键必须引用表 id 和tenant_id。

这似乎按预期工作,但如果我有不引用租户的表怎么办?在下面的示例中,我有一个不直接引用租户的 playlist_item。我在这里看到的一个问题是 playlist_item 可能引用的内容与其所属的播放列表没有相同的租户。

一个可能的解决方案是将tenant_id包含到数据库中存在的所有表中,以便能够始终引用租户,但这对我来说似乎有点麻烦,因为playlist_item(在本例中)已经有一个通过其与播放列表的所有者关系隐含的tenant_id。

我希望了解在这种情况下什么是好的解决方案,以及是否有任何替代方法可以实现相同的目标,而不会产生数据不一致的潜在风险。

(这只是一个示例,不是实际的数据库)

架构设计示例

sql database postgresql multi-tenant database-schema

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

postgresql 多租户模式与数据库

我们设计了一个多租户系统(假设有数百个租户,而不是数千个)。没有共享数据。数据库是PostgreSQL。为每个租户或架构创建一个单独的数据库是否更好?

优缺点都有什么?对文件系统、数据库引擎表/视图(如锁、对象权限等)有何影响?在多模式解决方案中它们会更大吗?单独的数据库应该更容易备份/恢复。

我知道有很多类似的问题,但大多数都与共享数据的情况有关,这是多个数据库的主要缺点,而我们没有这样的要求。

database postgresql database-design multi-tenant database-schema

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

创建 alembic 迁移以创建 version_table_schema 的架构

我想使用 alembic 在名为foo. 为了自动部署新环境,我希望 alembic 创建架构:

op.execute("create schema foo")
Run Code Online (Sandbox Code Playgroud)

我还想在这个模式中使用version_table_schema='foo'for context.configurein的 alembic_version 表env.py。但是,由于架构尚未创建并且 alembic 无法检查其版本,因此我遇到了一些 catch 22 情况。

version_table_schema没有人工干预就没有办法使用kwarg吗?我需要有一个单独的env.py和版本文件夹来创建架构吗?

python sqlalchemy database-schema alembic

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

如何获取Oracle中所有表的所有列名?

我想知道如何获取一个 Oracle 数据库中的所有列名、数据类型以及哪些表

以下是 MySQL 数据库,我正在寻找 Oracle 数据库的相同内容。

select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position
Run Code Online (Sandbox Code Playgroud)

sql oracle database-schema

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

Cassandra 中的动态架构更改

我有很多用户(150-2亿)。每个用户有 N(30-100) 个属性。该属性可以是整数、文本或时间戳类型。属性是未知的,所以我想动态地、即时地添加它们。

解决方案 1 - 通过更改表添加新列

   CREATE TABLE USER_PROFILE(
    UID uuid PRIMARY KEY,
    LAST_UPDATE_DATE TIMESTAMP,
    CREATION_DATE TIMESTAMP
   );
Run Code Online (Sandbox Code Playgroud)

对于每个新属性:

    ALTER TABLE USER_PROFILE ADD AGE INT;
    INSERT INTO USER_PROFILE ( UID, LAST_UPDATE_DATE, CREATION_DATE, AGE) VALUES ('01f63e8b-db53-44ef-924e-7a3ccfaeec28', 2021-01-12 07:34:19.121, 2021-01-12 07:34:19.121, 27);
Run Code Online (Sandbox Code Playgroud)

解决方案 2 - 固定架构:

CREATE TABLE USER_PROFILE(
    UID uuid,
    ATTRIBUTE_NAME TEXT,
    ATTRIBUTE_VALUE_TEXT TEXT,
    ATTRIBUTE_VALUE_TIMESTAMP TIMESTAMP,
    ATTRIBUTE_VALUE_INT INT,
    LAST_UPDATE_DATE TIMESTAMP,
    CREATION_DATE TIMESTAMP,
    PRIMARY KEY (UID, ATTRIBUTE_NAME)
);
Run Code Online (Sandbox Code Playgroud)

对于每个新属性:

INSERT INTO USER_PROFILE ( UID, ATTRIBUTE_NAME, ATTRIBUTE_VALUE_INT, LAST_UPDATE_DATE, CREATION_DATE) VALUES ('01f63e8b-db53-44ef-924e-7a3ccfaeec28', 'age', …
Run Code Online (Sandbox Code Playgroud)

database database-design cassandra nosql database-schema

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

有没有理由主键是nchar而其他字段是nvarchar?

我正在使用MSDN中的一个示例,它使用一个小型数据库来演示数据驱动的测试,这里是简单的模式:

CREATE TABLE dbo.LogonInfoTest
   (
   UserId nchar(256) NOT NULL PRIMARY KEY CLUSTERED,
   Password nvarchar(256) NULL,
   IsValid bit NOT NULL
   )  ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

我的问题是:选择nchar作为UserId和nvarchar的数据类型作为Password的数据类型的根本原因是什么?

sql sql-server-2005 database-schema

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