我正在尝试设计一个数据库来存储我所有的朋友和我的高尔夫成绩。您可能知道,高尔夫球比分由 18 洞个人比分组成。我可以想到两种设计模式的方法:
创建一个表,每个洞都有一列(例如 h1 到 h18),该表具有引用其他表的 FK player_id、round_id 和 course_id。它有一个总列,它是 h1 到 h18 列的总和。如果我更改了一个洞分数,我将需要手动更新总列。
创建一个表,其中包含一列球洞得分、一列球洞索引、一列 player_id、course_id 和 round_id。要获得一轮的总分,我需要对 round_id、player_id 进行 SUM 查询。
目前,数据库可能会存储少于 20 人的分数,因此任何一种方法都应该没问题。但是如果我想存储 20,000 人的分数,哪种方法更具可扩展性呢?
我正在使用 MySQL 5 和 PHP5。谢谢。
更新> 查询示例: 1. 读取所有玩家在一轮中的 9/18 得分并建立记分卡。2. 基本统计数据,例如找到球员最后 X 轮的最低/平均/最高总分。3. 更高级的统计数据,如最近 X 轮任何洞的平均得分。
按地址,我只指国家,州,城市,地区,街道,建筑物,
在哪里可以有效地在其他表格(例如人员)中引用该地址,以便我们可以选择同一城市等的人员?谢谢。
使用 Typescript 时,是否有在 Meteor 1.3 中使用模式验证的包。Meteor 指南(aldeed:simple-schema)中的推荐包似乎没有定义文件。
那么改用什么,或者 Typescript 有一个内置的方法来做到这一点?
我想知道如何制定博客数据库方案。作者撰写文章并将其发布在博客上。这对于像这样的表来说非常简单
作者、文章、博客
但文章也可以有草稿。读者看不到草稿,文章发表后博客的读者可以看到。已发表的文章可以取消发表,成为草稿。
如何连接
草稿
和
发布
包含文章和博客表的表?有必要吗?或者只是向 Article 表添加一些列?比如IsPublished之类的?
我正在设计一个用于多租户场景的数据库。我最近了解到,为了强制相互引用的表之间的tenant_ids 保持一致,我需要让表的主键既包含表id 又包含tenant_id。然后,外键必须引用表 id 和tenant_id。
这似乎按预期工作,但如果我有不引用租户的表怎么办?在下面的示例中,我有一个不直接引用租户的 playlist_item。我在这里看到的一个问题是 playlist_item 可能引用的内容与其所属的播放列表没有相同的租户。
一个可能的解决方案是将tenant_id包含到数据库中存在的所有表中,以便能够始终引用租户,但这对我来说似乎有点麻烦,因为playlist_item(在本例中)已经有一个通过其与播放列表的所有者关系隐含的tenant_id。
我希望了解在这种情况下什么是好的解决方案,以及是否有任何替代方法可以实现相同的目标,而不会产生数据不一致的潜在风险。
(这只是一个示例,不是实际的数据库)
我们设计了一个多租户系统(假设有数百个租户,而不是数千个)。没有共享数据。数据库是PostgreSQL。为每个租户或架构创建一个单独的数据库是否更好?
优缺点都有什么?对文件系统、数据库引擎表/视图(如锁、对象权限等)有何影响?在多模式解决方案中它们会更大吗?单独的数据库应该更容易备份/恢复。
我知道有很多类似的问题,但大多数都与共享数据的情况有关,这是多个数据库的主要缺点,而我们没有这样的要求。
database postgresql database-design multi-tenant database-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和版本文件夹来创建架构吗?
我想知道如何获取一个 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) 我有很多用户(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) 我正在使用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的数据类型的根本原因是什么?
database-schema ×10
database ×5
sql ×5
postgresql ×3
multi-tenant ×2
alembic ×1
cassandra ×1
meteor ×1
mongodb ×1
mysql ×1
node.js ×1
nosql ×1
oracle ×1
publish ×1
python ×1
sqlalchemy ×1
typescript ×1