我正在使用 Node.js 创建一个 GraphQL API,它迫使我返回camelCase.
在我的 PostgreSQL 数据库中,我目前的所有列都按照camelCase约定命名,但我在想:这是最好的主意吗?
我应该snake_case在数据库列中使用并在后端转换它们吗?
我有两个表:Message和Attachments(代表具有一对多关系的实体类型)如下:
CREATE TABLE message (
messageId ...,
[from]...,
[to]...,
subject...,
body...
);
CREATE TABLE attachments (
messageId...,
filename...
);
Run Code Online (Sandbox Code Playgroud)
我想选择基本消息数据并包含一个位列来表示消息是否有附件。我正在尝试在如下所示的操作中使用 EXISTS:
SELECT
M.*,
hasAttachments = EXISTS(SELECT AttachmentId
FROM Attachment
WHERE messageId = M.messageId),
FROM Message M
Run Code Online (Sandbox Code Playgroud)
但这不起作用 - 有什么方法可以做我正在寻找的东西?
我发现 Hugh Darwen 为避免我的数据库中的空值而写的这篇论文:链接,它描述了如何以第 6 范式实现数据库,以便您可以避免空值。语言教程 D 中描述了逻辑。我了解如何将所有这些逻辑转换为 SQL Server。但是在最后他展示了在当前的数据库管理系统中可以很好地实现这一点,然后我看到了我需要实现的部分:
它建议将 PERS_INFO 存储为一个单独的表,但这到底意味着什么?我将如何在 SQL Server 中实现它?
这是我第一次为将在 MySQL 上构建的数据库制作实体关系图 (ERD)。相关的业务领域是设备问题管理。
在此之前,我永远不会在表之间创建关系,我只会在 MySQLAdmin 中创建表并在我的 PHP/MySQL 代码中进行链接。
我应该建立这些关系有什么理由吗?
我已经阅读了很多关于数据库设计和关系的信息。
我想确保我创建的 ERD 是正确的;我犯错了吗?或者有更好的方法来做到这一点?
正在考虑的 ERD

我的数据库应该做什么:
我使用 PHP 5.4.3,我想使用普通的面向对象编程 (OOP) 方式远程连接到 MySQL 数据库(为了简洁起见,DB)(PHP 脚本驻留在与 DB 不同的服务器上):
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
Run Code Online (Sandbox Code Playgroud)
我收到错误:
警告:mysqli::mysqli():服务器请求客户端未知的身份验证方法 [mysql_old_password] 连接错误 (2054) 服务器请求客户端未知的身份验证方法
我找到了这个和这个,但它们似乎没有帮助。我使用 PHP 5.2.9,一切正常,但降级 PHP 版本对我来说不是一个解决方案。
我还必须提到,我没有对数据库设置的完全访问权限,因为客户端没有给我这种访问权限。我告诉他向 Hostgator 请求更新的密码格式支持,但他们回答说他们不能做任何超出我预期的事情。我从另一台远程服务器做了一项新的努力,现在我得到了:
连接错误 (1045) 用户“用户”@“主机”的访问被拒绝(使用密码:YES)
使用 PHP 5.3.9。由于远程服务器的 PHP 脚本,数据库似乎没有“让我进入”,但使用 Oracle 的 Workbench 一切正常。
谢谢你的时间。
假设我正在使用 SQL 平台并希望实现基数一对零或一(1-0..1) 的关系。这种情况与业务环境有关,我们可以说:
product可以有零或一price。所以:
场景一:
CREATE TABLE product
(
product_id INT NOT NULL,
name CHAR(30) NULL,
product_price_id INT NULL,
CONSTRAINT PK_product PRIMARY KEY (product_id),
CONSTRAINT UQ_product_price UNIQUE (product_price_id)
);
CREATE TABLE product_price
(
product_price_id INT NOT NULL,
price DECIMAL NOT NULL,
tax_rate DECIMAL NOT NULL,
currency_id INT NOT NULL,
CONSTRAINT PK_product_price PRIMARY KEY (product_price_id),
CONSTRAINT FK_product_price_to_product FOREIGN KEY (product_price_id)
REFERENCES product (product_id)
);
Run Code Online (Sandbox Code Playgroud)
场景2:
CREATE TABLE product
( …Run Code Online (Sandbox Code Playgroud) 我再次面临一个严重的问题,即 Oracle 根本没有布尔列类型。我需要使用char(1), 或smallint, 或其他一些。
最佳实践是什么,如何在 Oracle 中模拟布尔值?
(空间消耗现在不重要 - 但与 java/hibernate 线的良好合作很重要)。
我们有一张用于存储客户和物品的表。我们需要能够找到购买了一件商品而没有购买另一件商品的客户:
customer item
Sally 1
Sally 2
Sally 3
John 1
John 2
Paul 2
Paul 3
Run Code Online (Sandbox Code Playgroud)
我们想找到购买“1”而不是“3”的用户。在这种情况下,我们只想要“约翰”。
有人可以帮助我了解如何模拟以下情况:
有一个名为的超类(或超类型)PRODUCTS,它具有名为和的子类(或子类型)。FOODSHOES
存在另一个命名为 的超类CUSTOMERS,子类命名为SHOE STORE和GROCERY STORE。
我需要代表一些规则来表明:
FOOD只能送到GROCERY STORES.SHOES可以专门分发给SHOE STORES.我试过下面显示的两个图表:

顶图
我真的不喜欢 (a) 相同实体类型的重复,即ORDERS,和 (b) 围绕它的关系。
底图
我很确定这不是正确的符号。我是否应该在超类级别创建关系并注意限制将在编程级别实现?
我有一张这样的表:
Id Status
-- -----------
1 Closed
1 In progress
2 Rejected
3 Cancelled
4 Rejected
4 Closed
5 In progress
Run Code Online (Sandbox Code Playgroud)
我想说明,有行Status的封闭,拒绝或取消。但是,我想排除具有不同状态值的 ID,即使它们也具有这三个中的任何一个。
所以,对于我的例子,我希望输出是这样的:
Id Status
-- ---------
2 Rejected
3 Cancelled
4 Rejected
4 Closed
Run Code Online (Sandbox Code Playgroud)
我的查询应该是什么样的?