假设我有一个表 Account,其中包含要登录的用户的用户名和密码:-
account (
account_id BIGINT PRIMARY KEY,
username VARCHAR(30),
password VARCHAR(30)
)
-- I have two more tables that stores their credentials in the above table:-
customer (
delivery_address VARCHAR(100),
account_id FOREIGN KEY,
..30 more customer columns
)
admin (
sp_admin_code INT,
account_id FOREIGN KEY,
..30 more admin columns
)
管理员不能是客户,并使用相同的用户名和密码以客户身份登录。
我的问题:-
这是实现这种关系的正确方法吗?如果不是,那是什么?
我是否需要在帐户表的主键中添加一些约束,以表示它的单个条目可以同时被客户表或管理表引用?
现在我们还知道,帐户中的条目只有在客户表或管理表中有条目时才会存在,反之亦然。那么我们是否需要或是否想要添加一些级联/约束,我们该怎么做,我们应该怎么做,或者我们是否应该这样做?对不起,我很困惑。
谢谢你!
据我所知,在任何 RDBMS 中都没有这样的限制...
传统方式是直接进入数据库。
admin_or_customer
在account
表中设置一个字段,然后让客户端应用程序根据该字段读取一个表或另一个表。在这种情况下,两个竞争表中都有相同的记录是可能的account_id
,但如果您的客户端应用程序总是从account
第一个开始 - “错误”的行将成为隐藏的孤行,实际上不会发挥任何作用。您还可以定期清理此类孤行。可以在表上添加触发器
insert, update
,这样它们就会检查标志,并阻止创建新行或修改字段(如果它与标志冲突或者另一个表中已经存在这样的行)。admin
customer
account
account_id
account_id
可以在 上创建另一个触发器
account
,它将根据标志在admin
和之间自动创建/删除/移动记录。customer