外键应该在 "store" table 和 "opening hours" table 之间?
Where the foreign keys should be between a "store" table and a "opening hours" table?
我是一个新手,试图设计一个数据库,其中有商店并且每个商店都有营业时间(一对一的关系),然后我将有一个名为 "create_Store" 的过程,在这个过程中我有创建一个商店行和一个 "opening_times" 行。
问题是不知道哪种方式更好,有没有更好的设计方式
第一种方式:
Table:商店
id_store int 主键自增,
fk_id_opening_hours int 外键 (Opening_hours) 不为空
Table: Opening_hours
id_opening_hours primary_key 自动递增,
...
...
我对这种做法的想法是,一个商店只有一个 "Opening Hours" 行,因此该商店有对 "Opening hours" 的引用,但如果我想这样做,我必须首先插入一个 Opening_hour 行(因为 Store 的外键不接受空值)并且因为它具有自动递增,然后我将不得不以某种方式找到 "Opening_Time" id 来创建存储行。
第二种方式:
Table:商店
id_store int 主键自增,
...
...
Table: Opening_hours
id_opening_hours primary_key 自动递增,
fk_Store int 外键(存储)不为空
通过这种方式,我可以先创建商店(我觉得这样更自然),然后在同一过程中创建 "Opening_hours" 行,但现在我必须以某种方式搜索商店 ID(因为它是自动递增)来创建 opening_hours 行。
我不知道第一种方法是否更有效或更好,因为我已经在 table 中存储了 "opening time" id。
理论上说,要强制执行 1:1 关系,您需要每个 table 都具有另一个 UNIQUE
的外键。这就引出了一个问题......那么我该如何插入行呢?哪一个先走,因为每个都依赖于另一个?
解决方案在 "deferrable constraint" 概念中,该功能是 SQL 的组成部分。不幸的是,MySQL 没有实现 SQL 标准 的这一部分。据我所知只有 PostgreSQL 和 Oracle 这样做。
由于此限制,MySQL 中的可行解决方案只能使用单个外键。我会先在主 table 中插入一行(在本例中为 store
),获取自动生成的 PK,然后在次要的中插入一行(opening_hours
)。第二个的前键指向第一个。
然而,这是一个品味问题,所以你完全可以反过来做。
我是一个新手,试图设计一个数据库,其中有商店并且每个商店都有营业时间(一对一的关系),然后我将有一个名为 "create_Store" 的过程,在这个过程中我有创建一个商店行和一个 "opening_times" 行。
问题是不知道哪种方式更好,有没有更好的设计方式
第一种方式:
Table:商店
id_store int 主键自增,
fk_id_opening_hours int 外键 (Opening_hours) 不为空
Table: Opening_hours
id_opening_hours primary_key 自动递增,
...
...
我对这种做法的想法是,一个商店只有一个 "Opening Hours" 行,因此该商店有对 "Opening hours" 的引用,但如果我想这样做,我必须首先插入一个 Opening_hour 行(因为 Store 的外键不接受空值)并且因为它具有自动递增,然后我将不得不以某种方式找到 "Opening_Time" id 来创建存储行。
第二种方式:
Table:商店
id_store int 主键自增,
...
...
Table: Opening_hours
id_opening_hours primary_key 自动递增,
fk_Store int 外键(存储)不为空
通过这种方式,我可以先创建商店(我觉得这样更自然),然后在同一过程中创建 "Opening_hours" 行,但现在我必须以某种方式搜索商店 ID(因为它是自动递增)来创建 opening_hours 行。
我不知道第一种方法是否更有效或更好,因为我已经在 table 中存储了 "opening time" id。
理论上说,要强制执行 1:1 关系,您需要每个 table 都具有另一个 UNIQUE
的外键。这就引出了一个问题......那么我该如何插入行呢?哪一个先走,因为每个都依赖于另一个?
解决方案在 "deferrable constraint" 概念中,该功能是 SQL 的组成部分。不幸的是,MySQL 没有实现 SQL 标准 的这一部分。据我所知只有 PostgreSQL 和 Oracle 这样做。
由于此限制,MySQL 中的可行解决方案只能使用单个外键。我会先在主 table 中插入一行(在本例中为 store
),获取自动生成的 PK,然后在次要的中插入一行(opening_hours
)。第二个的前键指向第一个。
然而,这是一个品味问题,所以你完全可以反过来做。