假设我在SQL Server中有以下数据库:
CREATE TABLE [Order]
(
ID BIGINT IDENTITY(1,1)
CONSTRAINT PK_Order PRIMARY KEY CLUSTERED (ID)
);
CREATE TABLE OrderItem
(
ID BIGINT IDENTITY(1,1),
ORDER_ID BIGINT NOT NULL,
PRICE_ID BIGINT NOT NULL,
DISCOUNTED_PRICE_ID BIGINT NULL,
CONSTRAINT PK_OrderItem PRIMARY KEY CLUSTERED (ID)
);
CREATE TABLE Price
(
ID BIGINT IDENTITY(1,1),
AMOUNT FLOAT NOT NULL,
CURRENCY VARCHAR(3) NOT NULL,
CONSTRAINT PK_Price PRIMARY KEY CLUSTERED (ID)
);
ALTER TABLE OrderItem ADD CONSTRAINT FK_OrderItem_Order
FOREIGN KEY (ORDER_ID) REFERENCES [Order](ID) ON DELETE CASCADE;
ALTER TABLE OrderItem …Run Code Online (Sandbox Code Playgroud) 我们的应用程序中需要存储引用以供以后访问.
示例:用户可以一次提交发票,并且应该随时间存储此发票包含的所有参考(客户地址,计算的金额,产品描述)和计算.
我们需要以某种方式保留引用,但如果产品名称改变了怎么办?因此,某种程度上我们需要复制所有内容,以便以后记录,不会受到未来变化的影响.即使删除了产品,也需要在存储发票时进行审核.
这里有关数据库设计的最佳实践是什么?甚至最灵活的方法是什么,例如当用户想要稍后编辑发票并从数据库恢复时?
谢谢!
考虑这种情况:从销售人员处购买汽车.销售人员在陈列室(仅在一个陈列室)工作.陈列室隶属于制造商,仅销售该制造商生产的汽车.同时,汽车属于特定型号,而型号则由制造商制造.
限制R:汽车模型的制造商必须与汽车销售员的陈列室附属制造商的制造商相同.
该图显示了明显的外键关系.
----> Manufacturer <----
| |
| |
Showroom |
^ |
| Model
| ^
Salesperson |
^ |
| |
--------- Car ----------
Run Code Online (Sandbox Code Playgroud)
你如何执行限制R?您可以添加外键关系Car --> Manufacturer.然而,汽车的制造商可以通过在"钻石"周围以这种或那种方式连接表来建立,所以肯定这样做不会被规范化吗?然而,我不知道如何强制执行约束.
database database-design constraints foreign-keys normalization
为商店设计数据库,我遇到了一个小问题.假设我们的商店里有一个产品x,它有一个购买价格和好处,以获得零售价格.但是同一产品的商店还有另外一个不同的价格供应.1-根据商店所有者,他需要一个价格的产品.2 - 我应该从发货单独的产品信息说我把productid表 - 名称 - 参考和其他表的SuplierInvoice - Producyid-数量 - 购买价格
再次,我应该在第一个产品表或另一个表中放置价格,以及实际数量应该放在哪里?
我需要想法......
我正在设计一个db表,它将保存用户收藏的食品清单.我使用以下架构创建了收藏表
id, user_id, food_id
Run Code Online (Sandbox Code Playgroud)
user_id和food_id将是链接到另一个表的外键.
我只是想知道这是否有效且可扩展,如果用户有多个喜欢的东西,那么它将需要多行数据.
即用户有5个收藏的食品,那么它将包含五行以保存该用户的清单.
这有效吗?可扩展?什么是优化此架构的最佳方法?
thnx提前!!!