主要 table 所需的主要或唯一约束:"Orders"
Primary or unique constraint required on main table: "Orders"
抱歉,如果标题不清楚。
截至目前,我只有一堆客户和订单的电子表格。例如,电子表格中的一行可能如下所示:
ID 为 1
、姓名为 Sally
、地址为 291 North Street
的客户购买了商品 ID 2。
实际的电子表格看起来像这样 table:
Customer Id
Customer Name
Customer Address
Item Id
Name
Cost
Order Id
Ordered Date
1
Sally
291 North Street
2
Long Sleeves
1
1/1/2022
1
Sally
291 North Street
1
Shirt
1
1/1/2022
2
George
892 Lakers Ave
3
Backpack
5
4/9/2022
我的目标是正确规范此数据,使其不那么多余。我已经将数据分成 3 tables、Items
、Orders
和 OrderInfo
.
项目遵循如下结构:
Item Id (PK)
Name
Cost
1
XL Shirt
2
Long sleeves shirt
3
Backpack
订单:
Order ID (PK/FK?)
Customer ID
Ordered Date
1
1
1/1/2022
5
2
4/9/2022
订单信息:
Order ID (PK/FK?)
Item ID (PK/FK?)
1
2
1
1
5
3
正如您从订单 table 中看到的那样,我尝试合并所有多余的订单,例如用户 Sally 在同一订单中订购了一件长袖衬衫和一件普通衬衫。但是,这会在 OrdersInfo table 中留下冗余数据,其中多个字段的 OrderId 相同,因为客户在一个订单中购买了多个项目。
这是正确的吗?我正在尝试在 LibreOffice Base 中的 table 上定义关系,并且我可以为除 OrderInfo 和 Orders 之外的所有关系定义正确的 one-to-many 关系。
这是我尝试 link OrderID 字段时出现的关系和错误的屏幕截图。
错误代码:
SQL Status: S0011
Error code: -170
Primary or unique constraint required on main table: "Orders" in statement [ALTER TABLE "Order_Info" ADD FOREIGN KEY ("order_id") REFERENCES "Orders" ("order_id")]
外键必须引用所引用 table 的主键(或唯一键)。如果没有定义这样的 primary/unique 键,您将收到显示的错误。
示例:
CREATE TABLE Orders (
order_id INT NOT NULL,
customer_id INT NOT NULL,
PRIMARY KEY(order_id), <-- this is probably not defined
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);
CREATE TABLE Order_info (
order_id INT NOT NULL,
item_id INT NOT NULL,
quantity INT NOT NULL,
PRIMARY KEY (order_id, item_id),
FOREIGN KEY (order_id) REFERENCES Orders(order_id),
FOREIGN KEY (item_id) REFERENCES Items(item_id)
);
抱歉,如果标题不清楚。
截至目前,我只有一堆客户和订单的电子表格。例如,电子表格中的一行可能如下所示:
ID 为 1
、姓名为 Sally
、地址为 291 North Street
的客户购买了商品 ID 2。
实际的电子表格看起来像这样 table:
Customer Id | Customer Name | Customer Address | Item Id | Name | Cost | Order Id | Ordered Date |
---|---|---|---|---|---|---|---|
1 | Sally | 291 North Street | 2 | Long Sleeves | 1 | 1/1/2022 | |
1 | Sally | 291 North Street | 1 | Shirt | 1 | 1/1/2022 | |
2 | George | 892 Lakers Ave | 3 | Backpack | 5 | 4/9/2022 |
我的目标是正确规范此数据,使其不那么多余。我已经将数据分成 3 tables、Items
、Orders
和 OrderInfo
.
项目遵循如下结构:
Item Id (PK) | Name | Cost |
---|---|---|
1 | XL Shirt | |
2 | Long sleeves shirt | |
3 | Backpack |
订单:
Order ID (PK/FK?) | Customer ID | Ordered Date |
---|---|---|
1 | 1 | 1/1/2022 |
5 | 2 | 4/9/2022 |
订单信息:
Order ID (PK/FK?) | Item ID (PK/FK?) |
---|---|
1 | 2 |
1 | 1 |
5 | 3 |
正如您从订单 table 中看到的那样,我尝试合并所有多余的订单,例如用户 Sally 在同一订单中订购了一件长袖衬衫和一件普通衬衫。但是,这会在 OrdersInfo table 中留下冗余数据,其中多个字段的 OrderId 相同,因为客户在一个订单中购买了多个项目。
这是正确的吗?我正在尝试在 LibreOffice Base 中的 table 上定义关系,并且我可以为除 OrderInfo 和 Orders 之外的所有关系定义正确的 one-to-many 关系。
这是我尝试 link OrderID 字段时出现的关系和错误的屏幕截图。
错误代码:
SQL Status: S0011
Error code: -170
Primary or unique constraint required on main table: "Orders" in statement [ALTER TABLE "Order_Info" ADD FOREIGN KEY ("order_id") REFERENCES "Orders" ("order_id")]
外键必须引用所引用 table 的主键(或唯一键)。如果没有定义这样的 primary/unique 键,您将收到显示的错误。
示例:
CREATE TABLE Orders (
order_id INT NOT NULL,
customer_id INT NOT NULL,
PRIMARY KEY(order_id), <-- this is probably not defined
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);
CREATE TABLE Order_info (
order_id INT NOT NULL,
item_id INT NOT NULL,
quantity INT NOT NULL,
PRIMARY KEY (order_id, item_id),
FOREIGN KEY (order_id) REFERENCES Orders(order_id),
FOREIGN KEY (item_id) REFERENCES Items(item_id)
);