gpt4 book ai didi

database - Oracle:处理 Flag 的最佳实践

转载 作者:搜寻专家 更新时间:2023-10-30 20:26:57 24 4
gpt4 key购买 nike

我为一家 DVD 商店设计了一个 ER 图,它只允许向注册客户出租,而任何人都可以购买。 DVD 显然不能在购买后租用。

每张DVD都可以购买或购买。

问题:

在数据库中强制执行 DVD 购买后不能租借的最佳方法是什么。

我的解决方案:

我在 DVD 中有一个 Sold_flag,它是一个 Char(1 字节)。如果它被出售,它存储一个 1,如果可用购买或出租,它存储一个零。因此,如果它是一个,则不能出租。

同样,如果租用 DVD,它也会有一个标记。如果租用则存储一个,如果可租用或购买则存储零个。

这两个标志是处理这些问题的最佳方法吗?

我将它们串成 char(1 字节) 这是存储它们的最佳方式吗?

情况:

成员(Member_Num、姓名、地址、Telephone_Num、Join_Date)

DVD(DVD_ID、Film_ID、Sold_Flag、Rented_Flag)

出租(Member_Num, DVD_Num, Rented_On, Returned_On, Price, Fine)

购买(DVD_ID, Member_Num, Price, Sold_On)

电影(Film_ID、导演、姓名、Rent_Price、Sale_Price)

enter image description here

最佳答案

您不需要为出售和出租两个单独的标志,因为这两个状态是相互排斥的。如果出售了 DVD,则不能同时租用;反之亦然。也许更好的替代品是“状态”类型的列,其中会显示 1-Available、2-Rented 和 3-Sold。也许是不同状态的查找表。

不过,您必须以编程方式强制执行此规则,因为该规则适用于“租赁过程”,而不适用于表示有关 DVD 或租赁或客户的事实的静态数据。

您基本上是在说 - “在出租时,如果有人选择了一张已经售出的 DVD,则不允许进行出租交易”。

正因为如此,在你的程序/函数中说

PROCEDURE RENT_DVD (member_num, dvd_id, rented_on, price) 

一开始会有一个类似

的支票
FUNCTION is_dvd_rentable(dvd_id) return boolean

确认DVD的状态不是3。

您可能会想将逻辑放在触发器中,触发器可能会说“如果状态=3,则不允许完成此租赁交易”。但是如果您经常访问此站点或其他与 Oracle 相关的网站,例如 asktom,你会知道业务逻辑永远不应该放在触发器中。

关于database - Oracle:处理 Flag 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29017980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com